[ 
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)

Reply via email to