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

Jason van Zyl closed MNG-5449.
------------------------------

    Resolution: Won't Fix
    
> Conflicting dependencies and NoClassDefFoundError
> -------------------------------------------------
>
>                 Key: MNG-5449
>                 URL: https://jira.codehaus.org/browse/MNG-5449
>             Project: Maven 2 & 3
>          Issue Type: Bug
>          Components: Artifacts and Repositories, Dependencies
>    Affects Versions: 3.0.4
>         Environment: Apache Maven 3.0.4 (r1232337; 2012-01-17 00:44:56-0800)
> Java version: 1.6.0_37, vendor: Apple Inc.
> Default locale: en_US, platform encoding: MacRoman
> OS name: "mac os x", version: "10.6.8", arch: "x86_64", family: "mac"
>            Reporter: Daniel Lipsitt
>
> h3. Overview
> I have conflicting transitive dependencies that lead to a runtime 
> {{NoClassDefFoundError}} without any warning. 
> h3. Details
> I have a project whose transitive dependencies include two versions of 
> {{org.apache.maven/maven-artifact}}, 3.0.4 and 2.2.1.
> {code:xml|title=pom.xml}
> <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>demo</groupId>
>   <artifactId>demo</artifactId>
>   <version>0.0.1-SNAPSHOT</version>
>   <name>demo</name>
>   <dependencies>
>       <dependency>
>               <groupId>org.antlr</groupId>
>               <artifactId>antlr4-maven-plugin</artifactId>
>               <version>4.0</version>
>               <type>maven-plugin</type>
>       </dependency><dependency>
>               <groupId>org.apache.maven.plugin-tools</groupId>
>               <artifactId>maven-plugin-tools-generators</artifactId>
>               <version>3.2</version>
>       </dependency>
>   </dependencies>
> </project>
> {code}
> These artifacts have conflicting transitive dependencies:
> {code}
> $ mvn dependency:tree -Dverbose -Dincludes=org.apache.maven:maven-artifact
> [INFO] demo:demo:jar:0.0.1-SNAPSHOT
> [INFO] +- org.antlr:antlr4-maven-plugin:maven-plugin:4.0:compile
> [INFO] |  +- org.apache.maven:maven-plugin-api:jar:3.0.4:compile
> [INFO] |  |  \- org.apache.maven:maven-artifact:jar:3.0.4:compile
> [INFO] |  \- org.apache.maven:maven-project:jar:2.2.1:compile
> [INFO] |     +- org.apache.maven:maven-artifact-manager:jar:2.2.1:compile
> [INFO] |     |  \- (org.apache.maven:maven-artifact:jar:2.2.1:compile - 
> omitted for conflict with 3.0.4)
> [INFO] |     \- (org.apache.maven:maven-artifact:jar:2.2.1:compile - omitted 
> for conflict with 3.0.4)
> [INFO] \- 
> org.apache.maven.plugin-tools:maven-plugin-tools-generators:jar:3.2:compile
> [INFO]    +- 
> org.apache.maven.plugin-tools:maven-plugin-tools-api:jar:3.2:compile
> [INFO]    |  \- (org.apache.maven:maven-artifact:jar:2.2.1:compile - omitted 
> for conflict with 3.0.4)
> [INFO]    \- org.apache.maven:maven-plugin-descriptor:jar:2.2.1:compile
> [INFO]       \- (org.apache.maven:maven-artifact:jar:2.2.1:compile - omitted 
> for conflict with 3.0.4)
> {code}
> Here's some simple code importing a class from one of the direct dependencies:
> {code:java|title=Main.java}
> package demo;
> import org.apache.maven.tools.plugin.generator.GeneratorUtils;
> public class Main {
>       public static void main(String[] args) {
>               System.out.println(GeneratorUtils.toText("{@code demo}"));
>       }
> }
> {code}
> When run, it gives the following traceback:
> {code}
> Exception in thread "main" java.lang.NoClassDefFoundError: 
> org/apache/maven/artifact/DependencyResolutionRequiredException
>       at demo.Main.main(Main.java:6)
> Caused by: java.lang.ClassNotFoundException: 
> org.apache.maven.artifact.DependencyResolutionRequiredException
>       at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
>       at java.security.AccessController.doPrivileged(Native Method)
>       at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>       at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>       ... 1 more
> {code}
> It turns out that {{DependencyResolutionRequiredException}} is present in 
> maven-artifact 2.x, but not in 3.x.
> Given the above, I would have expected a warning of some kind about the 
> conflicting transitive dependencies if they can't be resolved automatically.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to