# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

# list of plugins that did not produce reproducible output in the past, with minimum reproducible version

# default org.apache.maven.plugins groupId
maven-archetype-plugin=3.2.0
# https://issues.apache.org/jira/browse/ARCHETYPE-590
maven-assembly-plugin=3.2.0
# https://issues.apache.org/jira/browse/MASSEMBLY-921
maven-jar-plugin=3.2.0
# https://issues.apache.org/jira/browse/MJAR-263
# https://issues.apache.org/jira/browse/MJAR-275
maven-ejb-plugin=3.1.0
# https://issues.apache.org/jira/browse/MEJB-128
maven-plugin-plugin=3.5.1
# https://issues.apache.org/jira/browse/MPLUGIN-326
maven-remote-resources-plugin=1.7.0
# https://issues.apache.org/jira/browse/MRRESOURCES-114
maven-shade-plugin=3.2.3
# https://issues.apache.org/jira/browse/MSHADE-352
maven-source-plugin=3.2.1
# https://issues.apache.org/jira/browse/MSOURCES-123
maven-war-plugin=3.3.1
# https://issues.apache.org/jira/browse/MWAR-432
maven-ear-plugin=3.1.0
# https://issues.apache.org/jira/browse/MEAR-280
maven-rar-plugin=3.0.0
# https://issues.apache.org/jira/browse/MRAR-86
maven-acr-plugin=3.2.0
# https://issues.apache.org/jira/browse/MACR-53

# plugin-specific groupId

org.antlr+antlr3-maven-plugin=fail:https://github.com/antlr/antlr3/pull/195

org.apache.felix+maven-bundle-plugin=5.1.4
# https://issues.apache.org/jira/browse/FELIX-6495
# https://issues.apache.org/jira/browse/FELIX-6496
org.apache.karaf.tooling+karaf-maven-plugin=fail:https://issues.apache.org/jira/browse/KARAF-7367
org.apache.nifi+nifi-nar-maven-plugin=1.3.4
# https://issues.apache.org/jira/browse/NIFI-9857
org.apache.servicemix.tooling+depends-maven-plugin=fail:https://issues.apache.org/jira/browse/SM-5021

org.codehaus.plexus+plexus-component-metadata=2.1.0
# https://github.com/codehaus-plexus/plexus-containers/issues/27
org.codehaus.mojo+jaxb2-maven-plugin=fail:https://github.com/mojohaus/jaxb2-maven-plugin
# 
org.codehaus.mojo+properties-maven-plugin=1.1.0
# https://github.com/mojohaus/properties-maven-plugin/pull/75
org.codehaus.mojo+flatten-maven-plugin=fail:https://github.com/mojohaus/flatten-maven-plugin/issues/256

org.eclipse.sisu+sisu-maven-plugin=0.3.4
# https://github.com/eclipse/sisu.inject/pull/5
org.eclipse.jetty+jetty-jspc-maven-plugin=fail:https://github.com/eclipse/jetty.project/
# 
org.springframework.boot+spring-boot-maven-plugin=fail:https://github.com/spring-projects/spring-boot/issues/21005
#

org.vafer+jdeb=1.10
# https://github.com/tcurdt/jdeb/pull/363

org.jboss.jandex+jandex-maven-plugin=fail:https://github.com/wildfly/jandex-maven-plugin/pull/35
