[
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