[
https://jira.codehaus.org/browse/MNG-5694?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Kurt Verduyckt updated MNG-5694:
--------------------------------
Description:
When you configure the maven-shade-plugin with a list of transformers in a root
pom, but override the <transformers> section of the maven-shade-plugin in a
child pom, the last defined transformer gets all of the parameters of the
previous transformers in the list, potentially making mvn install/package
unusable.
Concrete case (see also attached zip example) : in the root pom.xml I put the
following build configuration with a shade plugin and some transformers :
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.5</version>
<configuration>
<outputFile>test-deploy.jar</outputFile>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
<file>${project.build.directory}/generated-resources/versions/META-INF/${project.groupId}/${project.artifactId}.version</file>
<resource>META-INF/assembly.version</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>${mainClass}</mainClass>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"
/>
</transformers>
</configuration>
</plugin>
</plugins>
</build>
if in a child pom.xml, I now put the exact same transformers (useless override,
I know, but sometimes you need to add one in a sub project) :
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
<file>${project.build.directory}/generated-resources/versions/META-INF/${project.groupId}/${project.artifactId}.version</file>
<resource>META-INF/assembly.version</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>${mainClass}</mainClass>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"
/>
</transformers>
</configuration>
</plugin>
</plugins>
</build>
the 'mvn install' or 'mvn package' will fail with the following message :
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to configure plugin parameters for:
org.apache.maven.plugins:maven-shade-plugin:1.5
Cause: Cannot find setter nor field in
org.apache.maven.plugins.shade.resource.ServicesResourceTransformer for
'resource'
[INFO] ------------------------------------------------------------------------
This is because if you check the effective pom with 'mvn help:effective-pom'
you will see that the last transformer also gets the resource, file and
mainClass parameters of the transformers defined above, while it's not supposed
to:
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
<file>D:\dev\issue\child\target/generated-resources/versions/META-INF/mvn.transformers.issue.example/child.version</file>
<resource>META-INF/assembly.version</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>${mainClass}</mainClass>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer">
<resource>META-INF/spring.handlers</resource>
<file>D:\dev\issue\child\target/generated-resources/versions/META-INF/mvn.transformers.issue.example/child.version</file>
<mainClass>${mainClass}</mainClass>
</transformer>
</transformers>
I put this issue in the POM/Bootstrap & Build category because it looks like a
general xml 'aggregation' issue (title could maybe be generalized).
Note: this is issue is not present with Maven 3.3.2! But if you do need to use
2.2.1 in your corporate environment, the only solution is to write a dummy
transformer yourself that accepts the unwanted parameters to put at the end of
the transformers list.
was:
When you configure the maven-shade-plugin with a list of transformers in a root
pom, but override the <transformers> section of the maven-shade-plugin in a
child pom, the last defined transformer gets all of the parameters of the
previous transformers in the list, potentially making mvn install/package
unusable.
Concrete case (see also attached zip example) : in the root pom.xml I put the
following build configuration with a shade plugin and some transformers :
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.5</version>
<configuration>
<outputFile>test-deploy.jar</outputFile>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
<file>${project.build.directory}/generated-resources/versions/META-INF/${project.groupId}/${project.artifactId}.version</file>
<resource>META-INF/assembly.version</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>${mainClass}</mainClass>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"
/>
</transformers>
</configuration>
</plugin>
</plugins>
</build>
if in a child pom.xml, I now put the exact same transformers (useless override,
I know, but sometimes you need to add one in a sub project) :
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
<file>${project.build.directory}/generated-resources/versions/META-INF/${project.groupId}/${project.artifactId}.version</file>
<resource>META-INF/assembly.version</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>${mainClass}</mainClass>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"
/>
</transformers>
</configuration>
</plugin>
</plugins>
</build>
the 'mvn install' or 'mvn package' will fail with the following message :
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to configure plugin parameters for:
org.apache.maven.plugins:maven-shade-plugin:1.5
Cause: Cannot find setter nor field in
org.apache.maven.plugins.shade.resource.ServicesResourceTransformer for
'resource'
[INFO] ------------------------------------------------------------------------
This is because if you check the effective pom with 'mvn help:effective-pom'
you will see that the last transformer also gets the resource, file and
mainClass parameters of the transformers defined above, while it's not supposed
to:
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
<file>D:\dev\issue\child\target/generated-resources/versions/META-INF/mvn.transformers.issue.example/child.version</file>
<resource>META-INF/assembly.version</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>${mainClass}</mainClass>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer">
<resource>META-INF/spring.handlers</resource>
<file>D:\dev\issue\child\target/generated-resources/versions/META-INF/mvn.transformers.issue.example/child.version</file>
<mainClass>${mainClass}</mainClass>
</transformer>
</transformers>
I put this issue in the POM/Bootstrap & Build category because it looks like a
general xml 'aggregation' issue (title could maybe be generalized).
Note: this is issue is not present with Maven 3.3.2! But if you do need to use
2.2.1 in your corporate environment, the only solution is to write a dummy
appender yourself that accepts the unwanted parameters to put at the end of the
transformers list.
> Maven shade plugin transformers are not overrideable in child pom.
> ------------------------------------------------------------------
>
> Key: MNG-5694
> URL: https://jira.codehaus.org/browse/MNG-5694
> Project: Maven
> Issue Type: Bug
> Components: Bootstrap & Build, POM
> Affects Versions: 2.2.1
> Environment: Windows 7, java 1.7.0_60, maven 2.2.1
> Reporter: Kurt Verduyckt
> Attachments: issue.zip
>
>
> When you configure the maven-shade-plugin with a list of transformers in a
> root pom, but override the <transformers> section of the maven-shade-plugin
> in a child pom, the last defined transformer gets all of the parameters of
> the previous transformers in the list, potentially making mvn install/package
> unusable.
> Concrete case (see also attached zip example) : in the root pom.xml I put the
> following build configuration with a shade plugin and some transformers :
> <build>
> <plugins>
> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-shade-plugin</artifactId>
> <version>1.5</version>
> <configuration>
> <outputFile>test-deploy.jar</outputFile>
> <transformers>
> <transformer
> implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
> <resource>META-INF/spring.handlers</resource>
> </transformer>
> <transformer
> implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
>
> <file>${project.build.directory}/generated-resources/versions/META-INF/${project.groupId}/${project.artifactId}.version</file>
> <resource>META-INF/assembly.version</resource>
> </transformer>
> <transformer
> implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
> <mainClass>${mainClass}</mainClass>
> </transformer>
> <transformer
> implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"
> />
> </transformers>
> </configuration>
> </plugin>
> </plugins>
> </build>
> if in a child pom.xml, I now put the exact same transformers (useless
> override, I know, but sometimes you need to add one in a sub project) :
> <build>
> <plugins>
> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-shade-plugin</artifactId>
> <executions>
> <execution>
> <phase>package</phase>
> <goals>
> <goal>shade</goal>
> </goals>
> </execution>
> </executions>
> <configuration>
> <transformers>
> <transformer
> implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
> <resource>META-INF/spring.handlers</resource>
> </transformer>
> <transformer
> implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
>
> <file>${project.build.directory}/generated-resources/versions/META-INF/${project.groupId}/${project.artifactId}.version</file>
> <resource>META-INF/assembly.version</resource>
> </transformer>
> <transformer
> implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
> <mainClass>${mainClass}</mainClass>
> </transformer>
> <transformer
> implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"
> />
> </transformers>
> </configuration>
> </plugin>
> </plugins>
> </build>
> the 'mvn install' or 'mvn package' will fail with the following message :
> [ERROR] BUILD ERROR
> [INFO]
> ------------------------------------------------------------------------
> [INFO] Failed to configure plugin parameters for:
> org.apache.maven.plugins:maven-shade-plugin:1.5
> Cause: Cannot find setter nor field in
> org.apache.maven.plugins.shade.resource.ServicesResourceTransformer for
> 'resource'
> [INFO]
> ------------------------------------------------------------------------
> This is because if you check the effective pom with 'mvn help:effective-pom'
> you will see that the last transformer also gets the resource, file and
> mainClass parameters of the transformers defined above, while it's not
> supposed to:
> <transformers>
> <transformer
> implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
> <resource>META-INF/spring.handlers</resource>
> </transformer>
> <transformer
> implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
>
> <file>D:\dev\issue\child\target/generated-resources/versions/META-INF/mvn.transformers.issue.example/child.version</file>
> <resource>META-INF/assembly.version</resource>
> </transformer>
> <transformer
> implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
> <mainClass>${mainClass}</mainClass>
> </transformer>
> <transformer
> implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer">
> <resource>META-INF/spring.handlers</resource>
>
> <file>D:\dev\issue\child\target/generated-resources/versions/META-INF/mvn.transformers.issue.example/child.version</file>
> <mainClass>${mainClass}</mainClass>
> </transformer>
> </transformers>
> I put this issue in the POM/Bootstrap & Build category because it looks like
> a general xml 'aggregation' issue (title could maybe be generalized).
> Note: this is issue is not present with Maven 3.3.2! But if you do need to
> use 2.2.1 in your corporate environment, the only solution is to write a
> dummy transformer yourself that accepts the unwanted parameters to put at the
> end of the transformers list.
--
This message was sent by Atlassian JIRA
(v6.1.6#6162)