Andy Wilkinson created MNG-5737:
-----------------------------------

             Summary: Adding a test dependency can move dependencies from the 
compile scope to the test scope
                 Key: MNG-5737
                 URL: https://jira.codehaus.org/browse/MNG-5737
             Project: Maven
          Issue Type: Bug
          Components: Dependencies
    Affects Versions: 3.2.3
            Reporter: Andy Wilkinson


I'm seeing some strange behaviour where the transitive dependencies of a 
test-scope dependency are causing transitive dependencies of a compile-scope 
dependency to become test-scoped.

A pom with a single dependency on {{org.eclipse.jetty:jetty-webapp}} produces 
the following dependencies:

{noformat}
$ mvn dependency:tree | grep org.eclipse.jetty:
[INFO] \- org.eclipse.jetty:jetty-webapp:jar:8.1.10.v20130312:compile
[INFO]    +- org.eclipse.jetty:jetty-xml:jar:8.1.10.v20130312:compile
[INFO]    |  \- org.eclipse.jetty:jetty-util:jar:8.1.10.v20130312:compile
[INFO]    \- org.eclipse.jetty:jetty-servlet:jar:8.1.10.v20130312:compile
[INFO]       \- org.eclipse.jetty:jetty-security:jar:8.1.10.v20130312:compile
[INFO]          \- org.eclipse.jetty:jetty-server:jar:8.1.10.v20130312:compile
[INFO]             +- 
org.eclipse.jetty:jetty-continuation:jar:8.1.10.v20130312:compile
[INFO]             \- org.eclipse.jetty:jetty-http:jar:8.1.10.v20130312:compile
[INFO]                \- org.eclipse.jetty:jetty-io:jar:8.1.10.v20130312:compile
{noformat}

If I now add a test dependency on {{org.apache.solr:sole-core}}, a number of 
dependencies that were previously in the compile scope are now in the test 
scope:

{noformat}
[INFO] +- org.eclipse.jetty:jetty-webapp:jar:8.1.10.v20130312:compile
[INFO] |  +- org.eclipse.jetty:jetty-xml:jar:8.1.10.v20130312:compile
[INFO] |  \- org.eclipse.jetty:jetty-servlet:jar:8.1.10.v20130312:compile
[INFO]    +- org.eclipse.jetty:jetty-continuation:jar:8.1.10.v20130312:test
[INFO]    +- org.eclipse.jetty:jetty-deploy:jar:8.1.10.v20130312:test
[INFO]    +- org.eclipse.jetty:jetty-http:jar:8.1.10.v20130312:test
[INFO]    +- org.eclipse.jetty:jetty-io:jar:8.1.10.v20130312:test
[INFO]    +- org.eclipse.jetty:jetty-jmx:jar:8.1.10.v20130312:test
[INFO]    +- org.eclipse.jetty:jetty-security:jar:8.1.10.v20130312:compile
[INFO]    +- org.eclipse.jetty:jetty-server:jar:8.1.10.v20130312:test
[INFO]    +- org.eclipse.jetty:jetty-util:jar:8.1.10.v20130312:compile
{noformat}

My understanding is that this is because the shortest route to the root of the 
hierarchy wins and, for a number of the Jetty dependencies, the shortest route 
is via the test-scoped {{org.apache.solr:sole-core}}. I can understand a 
test-scoped dependency being upgraded to the compile scope when a dependency is 
added, but downgrading a dependency from the compile scope to the test scope 
feels broken to me.

I can work around the problem by using dependency management to force the 
dependencies into the compile scope, or by declaring direct dependencies on the 
transitive dependencies of {{org.eclipse.jetty:jetty-webapp}}, but both 
approaches require me to know what all those dependencies are and "duplicate" 
them in my pom, undermining the value of the dependencies being pulled in 
transitively in the first place.



--
This message was sent by Atlassian JIRA
(v6.1.6#6162)

Reply via email to