[ http://jira.codehaus.org/browse/MNG-4790?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Benjamin Bentmann closed MNG-4790. ---------------------------------- Resolution: Not A Bug Assignee: Benjamin Bentmann Actually, this works as intended. The relevant parts of the dependency graph from your example before conflict resolution: {noformat} org.apache.maven.test:maven-3-dependency-resolution:jar:1.0.0-SNAPSHOT +- org.jboss.ejb3:jboss-ejb3-core:jar:1.5.0:provided | +- org.jboss.metadata:jboss-metadata:jar:1.0.4:provided | (+- org.hibernate:ejb3-persistence:jar:1.0.2.GA:compile - excluded by jboss-ejb3-core) +- org.jboss.ejb3:jboss-ejb3-common:jar:1.0.2:compile +- org.jboss.metadata:jboss-metadata:jar:1.0.4:compile +- org.hibernate:ejb3-persistence:jar:1.0.2.GA:compile {noformat} Note that there are two occurrences of jboss-metadata and one of them having the dependency on ejb3-persistence surpressed via an exclusion. Now what happens in the legacy resolution code is that the usual nearest-wins strategy is abandoned and the second occurrence of jboss-metadata (including its sub tree) is selected for the resolved tree: {noformat} org.apache.maven.test:maven-3-dependency-resolution:jar:1.0.0-SNAPSHOT +- org.jboss.ejb3:jboss-ejb3-core:jar:1.5.0:provided +- org.jboss.ejb3:jboss-ejb3-common:jar:1.0.2:compile +- org.jboss.metadata:jboss-metadata:jar:1.0.4:compile +- org.hibernate:ejb3-persistence:jar:1.0.2.GA:compile {noformat} Hence ejb3-persistence shows up erroneously in the class path. Just slightly changing your example POM by putting jboss-ejb3-core in compile scope will radically change the resolved tree: {noformat} org.apache.maven.test:maven-3-dependency-resolution:jar:1.0.0-SNAPSHOT +- org.jboss.ejb3:jboss-ejb3-core:jar:1.5.0:compile | +- org.jboss.metadata:jboss-metadata:jar:1.0.4:compile +- org.jboss.ejb3:jboss-ejb3-common:jar:1.0.2:compile {noformat} i.e. ejb3-persistence vanishes from the class path. A similar dramatic effect caused by scopes was recently reported as MNG-4761. As a last illustration, consider this example: {noformat} project +- a:provided | \- c:1:provided | \- x \- b:compile \- c:2:compile \- y {noformat} Here, the legacy code will resolve the conflict to: {noformat} project +- a:provided \- b:compile \- c:1:compile \- y {noformat} i.e. it will pick the version from the nearest node (i.e. 1) but will actually use the sub tree from the farthest node (i.e. include y instead of x). > Dependency resolution issue with provided scope > ----------------------------------------------- > > Key: MNG-4790 > URL: http://jira.codehaus.org/browse/MNG-4790 > Project: Maven 2 & 3 > Issue Type: Bug > Components: Dependencies > Affects Versions: 3.0-beta-3 > Reporter: Paul Gier > Assignee: Benjamin Bentmann > Attachments: pom.xml > > > There is a slight difference in the dependency resolution between > maven-3-beta-2 and maven-3-beta-3. It seems to be related to the "provided" > scope, but I'm having some difficulty narrowing down the problem. I've > attached a POM which demonstrates the problem. Using maven-3-beta-2 the > ejb3-persistence jar is included in the compile classpath. Using > maven-3-beta-3, this jar is not included in the compile classpath. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira