You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Robert Balazsi (JIRA)" <ji...@codehaus.org> on 2013/04/25 11:24:52 UTC
[jira] (MNG-5404) Wrong resolution of dependency scope by Maven 3
[ https://jira.codehaus.org/browse/MNG-5404?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=324243#comment-324243 ]
Robert Balazsi commented on MNG-5404:
-------------------------------------
I've found two documents with mutually exclusive specifications regarding this:
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope -> nearest="provided", farthest="compile" => result="provided" (as you described)
http://docs.codehaus.org/display/MAVEN/Dependency+Mediation+and+Conflict+Resolution#DependencyMediationandConflictResolution-Scoperesolution -> ... => result="compile"
I'm not sure which one should be respected. Let's assume that the result should be "provided", as you pointed out.
Note then, that "mvn dependency:tree" displays the correct result. After some investigation, I found that this is because DefaultDependencyTreeBuilder uses DefaultArtifactCollector (in the "maven-artifact" project) that does some scope update (has a method checkScopeUpdate(...), etc.).
However, the AbstractDependencyFilterMojo (which the non-direct base class of ResolveDependenciesMojo that is called on "mvn dependency:resolve") relies on "project.getArtifacts()" filled previously by the DefaultProjectDependenciesResolver, which in turn, calls Aether's DefaultRepositorySystem.resolveDependencies(...) method.
This method resolves the scope conflict in question as "compile" so I guess Aether implements it a different way.
Note that there are several issues (such as MNG-5188 and MNG-5145) that are related to dependency scope resolution.
Actually, I'm not that familiar with the code, I was just debugging to see how it works. :-)
> Wrong resolution of dependency scope by Maven 3
> -----------------------------------------------
>
> Key: MNG-5404
> URL: https://jira.codehaus.org/browse/MNG-5404
> Project: Maven 2 & 3
> Issue Type: Bug
> Components: Dependencies
> Affects Versions: 3.0.4
> Reporter: Dmitry Batrak
> Attachments: build.log
>
>
> For the following POM:
> {noformat}
> <project>
> <modelVersion>4.0.0</modelVersion>
> <groupId>test</groupId>
> <artifactId>A</artifactId>
> <version>1.0</version>
> <dependencies>
> <dependency>
> <groupId>org.apache.axis2</groupId>
> <artifactId>axis2-xmlbeans</artifactId>
> <version>1.5</version>
> <scope>provided</scope>
> </dependency>
> <dependency>
> <groupId>org.apache.axis2</groupId>
> <artifactId>axis2-codegen</artifactId>
> <version>1.5</version>
> <exclusions>
> <exclusion>
> <groupId>org.apache.geronimo.specs</groupId>
> <artifactId>geronimo-stax-api_1.0_spec</artifactId>
> </exclusion>
> </exclusions>
> </dependency>
> </dependencies>
> </project>
> {noformat}
> running 'mvn dependency:resolve' using Maven 3.0.4 yields a wrong result.
> Namely, geronimo-stax-api_1.0_spec dependency is reported as having the resolved scope of 'compile'. With Maven 2.2.1 I get the 'provided' scope, as expected.
> Debug log is attached.
--
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