You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by Rob Vesse <rv...@yarcdata.com> on 2013/06/05 23:56:34 UTC

Possible bug in creating Dependency Reduced POM with Shade plugin

Hi All

I've run into what seems like an odd bug where the Shade plugin apparently gets stuck in an infinite loop when attempting to produce the Dependency Reduced POM (DRP).  For now as a hack I've turned off generation of the DRP for my affected project because it is unlikely that the artifact being produced will be pulled in via Maven so having a POM still reference all the dependencies is not a huge issue for me.

However I have attempted to produce a minimal test case and debug this a little, hopefully someone more familiar with the plugin can dig into this further and figure out whether this is a bug and how to fix it in future versions of the plugin.

Here is a minimal POM that reproduces the problem:


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>org.example</groupId>

<artifactId>shade-dpr-bug</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>Maven Shade DPR Bug Demonstrator</name>

<description>Repro for an apparent bug discovered in Maven Shade plugin</description>

<dependencies>

<dependency>

<groupId>org.apache.jena</groupId>

<artifactId>jena-arq</artifactId>

<version>2.10.1</version>

</dependency>

<!-- If you comment out either of the following dependency then things will work fine -->

<dependency>

<groupId>org.apache.jena</groupId>

<artifactId>jena-fuseki</artifactId>

<version>0.2.7</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.apache.jena</groupId>

<artifactId>jena-fuseki</artifactId>

<version>0.2.7</version>

<classifier>tests</classifier>

<scope>test</scope>

</dependency>

</dependencies>


<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-shade-plugin</artifactId>

<version>2.1</version>

<configuration>

<!-- If the following is uncommented out then this project builds fine -->

<!-- <createDependencyReducedPom>false</createDependencyReducedPom> -->

</configuration>

<executions>

<execution>

<phase>package</phase>

<goals>

<goal>shade</goal>

</goals>

</execution>

</executions>

</plugin>

</plugins>

</build>

</project>


Essentially the issue appears to be down to the fact that the POM references both the JAR and tests JAR artifacts of a module (jena-fuseki in this case) while also referencing another module (jena-arq) which is a transitive dependency of the other modules.  Per the XML comments if I only pull in one of the JARs for jena-fuseki things will work fine, but if I pull in both dependencies then shade will hang repeatedly creating the dependency reduced POM.  Equally if you don't have a dependency between pulled in that is a dependency of the other dependencies (jena-arq in my example) then again things will work fine.


However with this minimal example run at the console I see the following:


[INFO] Replacing original artifact with shaded artifact.

[INFO] Replacing /Users/rvesse/Documents/workspace/shade-dpr-bug/target/shade-dpr-bug-0.0.1-SNAPSHOT.jar with /Users/rvesse/Documents/workspace/shade-dpr-bug/target/shade-dpr-bug-0.0.1-SNAPSHOT-shaded.jar

[INFO] Dependency-reduced POM written at: /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml

[INFO] Dependency-reduced POM written at: /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml

[INFO] Dependency-reduced POM written at: /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml

[INFO] Dependency-reduced POM written at: /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml

[INFO] Dependency-reduced POM written at: /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml

[INFO] Dependency-reduced POM written at: /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml

[INFO] Dependency-reduced POM written at: /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml

[INFO] Dependency-reduced POM written at: /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml

[INFO] Dependency-reduced POM written at: /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml

[INFO] Dependency-reduced POM written at: /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml

[INFO] Dependency-reduced POM written at: /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml

[INFO] Dependency-reduced POM written at: /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml


This will continue indefinitely until you kill the process.  If I watch the dependency-reduced-pom.xml on the file system the plugin appears to be continually deleting and rewriting this file, each time the file is written it is larger than the previous write.  This implies to me that somehow the DPR creation is getting stuck and not managing to reach a suitable halting state.  On the occasions when I have managed to kill the process while the DPR is non-empty it appears that the problem is that the plugin is adding <exclusions> to the non-test jar version of the dependency and is just repeatedly adding the same set of exclusions.


I'm not familiar with the Maven code base and unfortunately I don't have any free time to go delving into the code myself so if someone who knows the plugin could investigate this it would be much appreciated.  As I said I have a workaround (even if is less than ideal) so a resolution is by no means urgent but this certainly seems like a bug that needs addressing.  As a naïve (and clearly non-maven expert) suggestion since test dependencies aren't transitive anyway would a simple fix be to simple have DPR creation remove any <scope>test</scope> dependencies as a first step?


Thanks,


Rob

Re: Possible bug in creating Dependency Reduced POM with Shade plugin

Posted by Rob Vesse <rv...@yarcdata.com>.
Filed as http://jira.codehaus.org/browse/MSHADE-148

I am pretty certain this is a bug, I use the shade plugin pretty heavily
across a variety of projects and this is the first and only time I have
ever had any issues.

Rob


On 6/5/13 11:33 PM, "Baptiste MATHUS" <ml...@batmat.net> wrote:

>Hi,
>Thanks for reporting.
>Could you please file a JIRA with the attached problematic pom?
>
>Btw you might want to try users list instead to get feedback and/or to
>double check it's a bug or a misuse.
>
>Cheers
>Le 5 juin 2013 23:57, "Rob Vesse" <rv...@yarcdata.com> a écrit :
>
>> Hi All
>>
>> I've run into what seems like an odd bug where the Shade plugin
>>apparently
>> gets stuck in an infinite loop when attempting to produce the Dependency
>> Reduced POM (DRP).  For now as a hack I've turned off generation of the
>>DRP
>> for my affected project because it is unlikely that the artifact being
>> produced will be pulled in via Maven so having a POM still reference all
>> the dependencies is not a huge issue for me.
>>
>> However I have attempted to produce a minimal test case and debug this a
>> little, hopefully someone more familiar with the plugin can dig into
>>this
>> further and figure out whether this is a bug and how to fix it in future
>> versions of the plugin.
>>
>> Here is a minimal POM that reproduces the problem:
>>
>>
>> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
>> http://www.w3.org/2001/XMLSchema-instance"
>>
>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>
>> <modelVersion>4.0.0</modelVersion>
>>
>> <groupId>org.example</groupId>
>>
>> <artifactId>shade-dpr-bug</artifactId>
>>
>> <version>0.0.1-SNAPSHOT</version>
>>
>> <name>Maven Shade DPR Bug Demonstrator</name>
>>
>> <description>Repro for an apparent bug discovered in Maven Shade
>> plugin</description>
>>
>> <dependencies>
>>
>> <dependency>
>>
>> <groupId>org.apache.jena</groupId>
>>
>> <artifactId>jena-arq</artifactId>
>>
>> <version>2.10.1</version>
>>
>> </dependency>
>>
>> <!-- If you comment out either of the following dependency then things
>> will work fine -->
>>
>> <dependency>
>>
>> <groupId>org.apache.jena</groupId>
>>
>> <artifactId>jena-fuseki</artifactId>
>>
>> <version>0.2.7</version>
>>
>> <scope>test</scope>
>>
>> </dependency>
>>
>> <dependency>
>>
>> <groupId>org.apache.jena</groupId>
>>
>> <artifactId>jena-fuseki</artifactId>
>>
>> <version>0.2.7</version>
>>
>> <classifier>tests</classifier>
>>
>> <scope>test</scope>
>>
>> </dependency>
>>
>> </dependencies>
>>
>>
>> <build>
>>
>> <plugins>
>>
>> <plugin>
>>
>> <groupId>org.apache.maven.plugins</groupId>
>>
>> <artifactId>maven-shade-plugin</artifactId>
>>
>> <version>2.1</version>
>>
>> <configuration>
>>
>> <!-- If the following is uncommented out then this project builds fine
>>-->
>>
>> <!-- <createDependencyReducedPom>false</createDependencyReducedPom> -->
>>
>> </configuration>
>>
>> <executions>
>>
>> <execution>
>>
>> <phase>package</phase>
>>
>> <goals>
>>
>> <goal>shade</goal>
>>
>> </goals>
>>
>> </execution>
>>
>> </executions>
>>
>> </plugin>
>>
>> </plugins>
>>
>> </build>
>>
>> </project>
>>
>>
>> Essentially the issue appears to be down to the fact that the POM
>> references both the JAR and tests JAR artifacts of a module
>>(jena-fuseki in
>> this case) while also referencing another module (jena-arq) which is a
>> transitive dependency of the other modules.  Per the XML comments if I
>>only
>> pull in one of the JARs for jena-fuseki things will work fine, but if I
>> pull in both dependencies then shade will hang repeatedly creating the
>> dependency reduced POM.  Equally if you don't have a dependency between
>> pulled in that is a dependency of the other dependencies (jena-arq in my
>> example) then again things will work fine.
>>
>>
>> However with this minimal example run at the console I see the
>>following:
>>
>>
>> [INFO] Replacing original artifact with shaded artifact.
>>
>> [INFO] Replacing
>> 
>>/Users/rvesse/Documents/workspace/shade-dpr-bug/target/shade-dpr-bug-0.0.
>>1-SNAPSHOT.jar
>> with
>> 
>>/Users/rvesse/Documents/workspace/shade-dpr-bug/target/shade-dpr-bug-0.0.
>>1-SNAPSHOT-shaded.jar
>>
>> [INFO] Dependency-reduced POM written at:
>> 
>>/Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xm
>>l
>>
>> [INFO] Dependency-reduced POM written at:
>> 
>>/Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xm
>>l
>>
>> [INFO] Dependency-reduced POM written at:
>> 
>>/Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xm
>>l
>>
>> [INFO] Dependency-reduced POM written at:
>> 
>>/Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xm
>>l
>>
>> [INFO] Dependency-reduced POM written at:
>> 
>>/Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xm
>>l
>>
>> [INFO] Dependency-reduced POM written at:
>> 
>>/Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xm
>>l
>>
>> [INFO] Dependency-reduced POM written at:
>> 
>>/Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xm
>>l
>>
>> [INFO] Dependency-reduced POM written at:
>> 
>>/Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xm
>>l
>>
>> [INFO] Dependency-reduced POM written at:
>> 
>>/Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xm
>>l
>>
>> [INFO] Dependency-reduced POM written at:
>> 
>>/Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xm
>>l
>>
>> [INFO] Dependency-reduced POM written at:
>> 
>>/Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xm
>>l
>>
>> [INFO] Dependency-reduced POM written at:
>> 
>>/Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xm
>>l
>>
>>
>> This will continue indefinitely until you kill the process.  If I watch
>> the dependency-reduced-pom.xml on the file system the plugin appears to
>>be
>> continually deleting and rewriting this file, each time the file is
>>written
>> it is larger than the previous write.  This implies to me that somehow
>>the
>> DPR creation is getting stuck and not managing to reach a suitable
>>halting
>> state.  On the occasions when I have managed to kill the process while
>>the
>> DPR is non-empty it appears that the problem is that the plugin is
>>adding
>> <exclusions> to the non-test jar version of the dependency and is just
>> repeatedly adding the same set of exclusions.
>>
>>
>> I'm not familiar with the Maven code base and unfortunately I don't have
>> any free time to go delving into the code myself so if someone who knows
>> the plugin could investigate this it would be much appreciated.  As I
>>said
>> I have a workaround (even if is less than ideal) so a resolution is by
>>no
>> means urgent but this certainly seems like a bug that needs addressing.
>> As
>> a naïve (and clearly non-maven expert) suggestion since test
>>dependencies
>> aren't transitive anyway would a simple fix be to simple have DPR
>>creation
>> remove any <scope>test</scope> dependencies as a first step?
>>
>>
>> Thanks,
>>
>>
>> Rob
>>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


Re: Possible bug in creating Dependency Reduced POM with Shade plugin

Posted by Baptiste MATHUS <ml...@batmat.net>.
Hi,
Thanks for reporting.
Could you please file a JIRA with the attached problematic pom?

Btw you might want to try users list instead to get feedback and/or to
double check it's a bug or a misuse.

Cheers
Le 5 juin 2013 23:57, "Rob Vesse" <rv...@yarcdata.com> a écrit :

> Hi All
>
> I've run into what seems like an odd bug where the Shade plugin apparently
> gets stuck in an infinite loop when attempting to produce the Dependency
> Reduced POM (DRP).  For now as a hack I've turned off generation of the DRP
> for my affected project because it is unlikely that the artifact being
> produced will be pulled in via Maven so having a POM still reference all
> the dependencies is not a huge issue for me.
>
> However I have attempted to produce a minimal test case and debug this a
> little, hopefully someone more familiar with the plugin can dig into this
> further and figure out whether this is a bug and how to fix it in future
> versions of the plugin.
>
> Here is a minimal POM that reproduces the problem:
>
>
> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
> http://www.w3.org/2001/XMLSchema-instance"
>
> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>
> <modelVersion>4.0.0</modelVersion>
>
> <groupId>org.example</groupId>
>
> <artifactId>shade-dpr-bug</artifactId>
>
> <version>0.0.1-SNAPSHOT</version>
>
> <name>Maven Shade DPR Bug Demonstrator</name>
>
> <description>Repro for an apparent bug discovered in Maven Shade
> plugin</description>
>
> <dependencies>
>
> <dependency>
>
> <groupId>org.apache.jena</groupId>
>
> <artifactId>jena-arq</artifactId>
>
> <version>2.10.1</version>
>
> </dependency>
>
> <!-- If you comment out either of the following dependency then things
> will work fine -->
>
> <dependency>
>
> <groupId>org.apache.jena</groupId>
>
> <artifactId>jena-fuseki</artifactId>
>
> <version>0.2.7</version>
>
> <scope>test</scope>
>
> </dependency>
>
> <dependency>
>
> <groupId>org.apache.jena</groupId>
>
> <artifactId>jena-fuseki</artifactId>
>
> <version>0.2.7</version>
>
> <classifier>tests</classifier>
>
> <scope>test</scope>
>
> </dependency>
>
> </dependencies>
>
>
> <build>
>
> <plugins>
>
> <plugin>
>
> <groupId>org.apache.maven.plugins</groupId>
>
> <artifactId>maven-shade-plugin</artifactId>
>
> <version>2.1</version>
>
> <configuration>
>
> <!-- If the following is uncommented out then this project builds fine -->
>
> <!-- <createDependencyReducedPom>false</createDependencyReducedPom> -->
>
> </configuration>
>
> <executions>
>
> <execution>
>
> <phase>package</phase>
>
> <goals>
>
> <goal>shade</goal>
>
> </goals>
>
> </execution>
>
> </executions>
>
> </plugin>
>
> </plugins>
>
> </build>
>
> </project>
>
>
> Essentially the issue appears to be down to the fact that the POM
> references both the JAR and tests JAR artifacts of a module (jena-fuseki in
> this case) while also referencing another module (jena-arq) which is a
> transitive dependency of the other modules.  Per the XML comments if I only
> pull in one of the JARs for jena-fuseki things will work fine, but if I
> pull in both dependencies then shade will hang repeatedly creating the
> dependency reduced POM.  Equally if you don't have a dependency between
> pulled in that is a dependency of the other dependencies (jena-arq in my
> example) then again things will work fine.
>
>
> However with this minimal example run at the console I see the following:
>
>
> [INFO] Replacing original artifact with shaded artifact.
>
> [INFO] Replacing
> /Users/rvesse/Documents/workspace/shade-dpr-bug/target/shade-dpr-bug-0.0.1-SNAPSHOT.jar
> with
> /Users/rvesse/Documents/workspace/shade-dpr-bug/target/shade-dpr-bug-0.0.1-SNAPSHOT-shaded.jar
>
> [INFO] Dependency-reduced POM written at:
> /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml
>
> [INFO] Dependency-reduced POM written at:
> /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml
>
> [INFO] Dependency-reduced POM written at:
> /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml
>
> [INFO] Dependency-reduced POM written at:
> /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml
>
> [INFO] Dependency-reduced POM written at:
> /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml
>
> [INFO] Dependency-reduced POM written at:
> /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml
>
> [INFO] Dependency-reduced POM written at:
> /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml
>
> [INFO] Dependency-reduced POM written at:
> /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml
>
> [INFO] Dependency-reduced POM written at:
> /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml
>
> [INFO] Dependency-reduced POM written at:
> /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml
>
> [INFO] Dependency-reduced POM written at:
> /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml
>
> [INFO] Dependency-reduced POM written at:
> /Users/rvesse/Documents/workspace/shade-dpr-bug/dependency-reduced-pom.xml
>
>
> This will continue indefinitely until you kill the process.  If I watch
> the dependency-reduced-pom.xml on the file system the plugin appears to be
> continually deleting and rewriting this file, each time the file is written
> it is larger than the previous write.  This implies to me that somehow the
> DPR creation is getting stuck and not managing to reach a suitable halting
> state.  On the occasions when I have managed to kill the process while the
> DPR is non-empty it appears that the problem is that the plugin is adding
> <exclusions> to the non-test jar version of the dependency and is just
> repeatedly adding the same set of exclusions.
>
>
> I'm not familiar with the Maven code base and unfortunately I don't have
> any free time to go delving into the code myself so if someone who knows
> the plugin could investigate this it would be much appreciated.  As I said
> I have a workaround (even if is less than ideal) so a resolution is by no
> means urgent but this certainly seems like a bug that needs addressing.  As
> a naïve (and clearly non-maven expert) suggestion since test dependencies
> aren't transitive anyway would a simple fix be to simple have DPR creation
> remove any <scope>test</scope> dependencies as a first step?
>
>
> Thanks,
>
>
> Rob
>