[ 
https://issues.apache.org/jira/browse/MNG-6016?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Steven Schlansker updated MNG-6016:
-----------------------------------
    Description: 
Consider the project: 
https://github.com/stevenschlansker/maven-configure-transformer-bug/

Simple 2 module project.  Parent defines some Shade plugin configuration, 
notably a {{ResourceTransformer}} with a {{mainClass}} declaration.

Child then tries to add a {{PropertiesMergingResourceTransformer}}, but somehow 
the {{mainClass}} declaration from the parent gets merged into this other 
transformer, causing a build failure:

{quote}
[ERROR] Failed to execute goal 
org.apache.maven.plugins:maven-shade-plugin:2.4.3:shade (assemble-app) on 
project maven-configure-transformer-bug-child: Unable to parse configuration of 
mojo org.apache.maven.plugins:maven-shade-plugin:2.4.3:shade for parameter 
mainClass: Cannot find 'mainClass' in class 
org.springframework.boot.maven.PropertiesMergingResourceTransformer -> [Help 1]
{quote}


The effective POM shows that something extremely unintuitive is going on with 
model merging:

{code}
      <plugin>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.4.3</version>
        <executions>
          <execution>
            <id>assemble-app</id>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer 
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.handlers</resource>
                </transformer>
                <transformer 
implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
                  <resource>META-INF/spring.factories</resource>
                  <mainClass>foo</mainClass>
                  <collectSections>true</collectSections>
                </transformer>
                <transformer 
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.schemas</resource>
                </transformer>
                <transformer 
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"
 />
                <transformer 
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"
 />
              </transformers>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.3.3.RELEASE</version>
            <scope>compile</scope>
          </dependency>
        </dependencies>
        <configuration>
          <transformers>
            <transformer 
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
              <resource>META-INF/spring.handlers</resource>
            </transformer>
            <transformer 
implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
              <resource>META-INF/spring.factories</resource>
              <mainClass>foo</mainClass>
              <collectSections>true</collectSections>
            </transformer>
            <transformer 
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
              <resource>META-INF/spring.schemas</resource>
            </transformer>
            <transformer 
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"
 />
            <transformer 
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"
 />
          </transformers>
        </configuration>
      </plugin>
{code}

It is possible to escape this by adding {{combine.self="override"}} to the 
{{<transformers>}} node.  But I think the configuration ending up on the wrong 
transformer is a bug, and the fact that it causes duplicate configuration 
sections is also extremely confusing.  And somewhere in the shuffle the 
original {{CollectingManifestResourceTransformer}} is lost entirely.  (Note 
that it's not even on the plugin path, so referencing it should be an error!)

  was:
Consider the project: 
https://github.com/stevenschlansker/maven-configure-transformer-bug/

Simple 2 module project.  Parent defines some Shade plugin configuration, 
notably a {{ResourceTransformer}} with a {{mainClass}} declaration.

Child then tries to add a {{PropertiesMergingResourceTransformer}}, but somehow 
the {{mainClass}} declaration from the parent gets merged into this other 
transformer, causing a build failure:

{quote}
[ERROR] Failed to execute goal 
org.apache.maven.plugins:maven-shade-plugin:2.4.3:shade (assemble-app) on 
project maven-configure-transformer-bug-child: Unable to parse configuration of 
mojo org.apache.maven.plugins:maven-shade-plugin:2.4.3:shade for parameter 
mainClass: Cannot find 'mainClass' in class 
org.springframework.boot.maven.PropertiesMergingResourceTransformer -> [Help 1]
{quote}


The effective POM shows that something extremely unintuitive is going on with 
model merging:

{code}
      <plugin>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.4.3</version>
        <executions>
          <execution>
            <id>assemble-app</id>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer 
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.handlers</resource>
                </transformer>
                <transformer 
implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
                  <resource>META-INF/spring.factories</resource>
                  <mainClass>foo</mainClass>
                  <collectSections>true</collectSections>
                </transformer>
                <transformer 
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.schemas</resource>
                </transformer>
                <transformer 
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"
 />
                <transformer 
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"
 />
              </transformers>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.3.3.RELEASE</version>
            <scope>compile</scope>
          </dependency>
        </dependencies>
        <configuration>
          <transformers>
            <transformer 
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
              <resource>META-INF/spring.handlers</resource>
            </transformer>
            <transformer 
implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
              <resource>META-INF/spring.factories</resource>
              <mainClass>foo</mainClass>
              <collectSections>true</collectSections>
            </transformer>
            <transformer 
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
              <resource>META-INF/spring.schemas</resource>
            </transformer>
            <transformer 
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"
 />
            <transformer 
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"
 />
          </transformers>
        </configuration>
      </plugin>
{code}

It is possible to escape this by adding {{combine.self="override}} to the 
{{<transformers>}} node.  But I think the configuration ending up on the wrong 
transformer is a bug, and the fact that it causes duplicate configuration 
sections is also extremely confusing.


> Maven incorrectly builds POM when you override Shade transformers in a child
> ----------------------------------------------------------------------------
>
>                 Key: MNG-6016
>                 URL: https://issues.apache.org/jira/browse/MNG-6016
>             Project: Maven
>          Issue Type: Bug
>          Components: Inheritance and Interpolation, POM
>    Affects Versions: 3.3.9
>            Reporter: Steven Schlansker
>
> Consider the project: 
> https://github.com/stevenschlansker/maven-configure-transformer-bug/
> Simple 2 module project.  Parent defines some Shade plugin configuration, 
> notably a {{ResourceTransformer}} with a {{mainClass}} declaration.
> Child then tries to add a {{PropertiesMergingResourceTransformer}}, but 
> somehow the {{mainClass}} declaration from the parent gets merged into this 
> other transformer, causing a build failure:
> {quote}
> [ERROR] Failed to execute goal 
> org.apache.maven.plugins:maven-shade-plugin:2.4.3:shade (assemble-app) on 
> project maven-configure-transformer-bug-child: Unable to parse configuration 
> of mojo org.apache.maven.plugins:maven-shade-plugin:2.4.3:shade for parameter 
> mainClass: Cannot find 'mainClass' in class 
> org.springframework.boot.maven.PropertiesMergingResourceTransformer -> [Help 
> 1]
> {quote}
> The effective POM shows that something extremely unintuitive is going on with 
> model merging:
> {code}
>       <plugin>
>         <artifactId>maven-shade-plugin</artifactId>
>         <version>2.4.3</version>
>         <executions>
>           <execution>
>             <id>assemble-app</id>
>             <phase>package</phase>
>             <goals>
>               <goal>shade</goal>
>             </goals>
>             <configuration>
>               <transformers>
>                 <transformer 
> implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
>                   <resource>META-INF/spring.handlers</resource>
>                 </transformer>
>                 <transformer 
> implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
>                   <resource>META-INF/spring.factories</resource>
>                   <mainClass>foo</mainClass>
>                   <collectSections>true</collectSections>
>                 </transformer>
>                 <transformer 
> implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
>                   <resource>META-INF/spring.schemas</resource>
>                 </transformer>
>                 <transformer 
> implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"
>  />
>                 <transformer 
> implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"
>  />
>               </transformers>
>             </configuration>
>           </execution>
>         </executions>
>         <dependencies>
>           <dependency>
>             <groupId>org.springframework.boot</groupId>
>             <artifactId>spring-boot-maven-plugin</artifactId>
>             <version>1.3.3.RELEASE</version>
>             <scope>compile</scope>
>           </dependency>
>         </dependencies>
>         <configuration>
>           <transformers>
>             <transformer 
> implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
>               <resource>META-INF/spring.handlers</resource>
>             </transformer>
>             <transformer 
> implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
>               <resource>META-INF/spring.factories</resource>
>               <mainClass>foo</mainClass>
>               <collectSections>true</collectSections>
>             </transformer>
>             <transformer 
> implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
>               <resource>META-INF/spring.schemas</resource>
>             </transformer>
>             <transformer 
> implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"
>  />
>             <transformer 
> implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"
>  />
>           </transformers>
>         </configuration>
>       </plugin>
> {code}
> It is possible to escape this by adding {{combine.self="override"}} to the 
> {{<transformers>}} node.  But I think the configuration ending up on the 
> wrong transformer is a bug, and the fact that it causes duplicate 
> configuration sections is also extremely confusing.  And somewhere in the 
> shuffle the original {{CollectingManifestResourceTransformer}} is lost 
> entirely.  (Note that it's not even on the plugin path, so referencing it 
> should be an error!)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to