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)