You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sc...@apache.org on 2016/07/01 17:25:41 UTC

[6/6] maven git commit: [MNG-5988] Dependency mediation should prioritize transitive dependencies based on scope.

[MNG-5988] Dependency mediation should prioritize transitive dependencies based on scope.


Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/bec76204
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/bec76204
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/bec76204

Branch: refs/heads/MNG-6006
Commit: bec762043f0d900a471d49de3a3ac7cef096e401
Parents: d7967a5
Author: Christian Schulte <sc...@apache.org>
Authored: Fri Jul 1 16:41:52 2016 +0200
Committer: Christian Schulte <sc...@apache.org>
Committed: Fri Jul 1 19:25:15 2016 +0200

----------------------------------------------------------------------
 .../internal/MavenRepositorySystemUtils.java    |   7 +-
 .../maven/project/ProjectClasspathTest.java     | 124 +++++++++++++------
 .../projects/scope/transitive-compile-dep.xml   |   8 +-
 .../projects/scope/transitive-default-dep.xml   |   7 +-
 .../projects/scope/transitive-provided-dep.xml  |   8 +-
 .../projects/scope/transitive-runtime-dep.xml   |   7 +-
 .../projects/scope/transitive-test-dep.xml      |   7 +-
 7 files changed, 121 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/bec76204/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java
----------------------------------------------------------------------
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java
index b0b0a8d..cd15a85 100644
--- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java
+++ b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java
@@ -41,6 +41,7 @@ import org.eclipse.aether.util.graph.selector.ScopeDependencySelector;
 import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
 import org.eclipse.aether.util.graph.transformer.ConflictResolver;
 import org.eclipse.aether.util.graph.transformer.JavaDependencyContextRefiner;
+import org.eclipse.aether.util.graph.transformer.JavaDependencyMediator;
 import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver;
 import org.eclipse.aether.util.graph.transformer.JavaScopeSelector;
 import org.eclipse.aether.util.graph.transformer.NearestVersionSelector;
@@ -103,12 +104,12 @@ public final class MavenRepositorySystemUtils
                                        new OptionalDependencySelector(), new ExclusionDependencySelector() );
         session.setDependencySelector( depFilter );
 
-        DependencyGraphTransformer transformer =
+        DependencyGraphTransformer conflictResolver =
             new ConflictResolver( new NearestVersionSelector(), new JavaScopeSelector(),
                                   new SimpleOptionalitySelector(), new JavaScopeDeriver() );
 
-        session.setDependencyGraphTransformer(
-            new ChainedDependencyGraphTransformer( transformer, new JavaDependencyContextRefiner() ) );
+        session.setDependencyGraphTransformer( new ChainedDependencyGraphTransformer(
+            new JavaDependencyMediator(), conflictResolver, new JavaDependencyContextRefiner() ) );
 
         DefaultArtifactTypeRegistry stereotypes = new DefaultArtifactTypeRegistry();
         stereotypes.add( new DefaultArtifactType( "pom" ) );

http://git-wip-us.apache.org/repos/asf/maven/blob/bec76204/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java
----------------------------------------------------------------------
diff --git a/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java b/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java
index d7ae86e..3463e94 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java
@@ -30,13 +30,16 @@ import org.eclipse.aether.impl.ArtifactResolver;
 public class ProjectClasspathTest
     extends AbstractMavenProjectTestCase
 {
+
     static final String dir = "projects/scope/";
 
     public void setUp()
         throws Exception
     {
         ArtifactResolver resolver = lookup( ArtifactResolver.class, "classpath" );
-        DefaultArtifactDescriptorReader pomReader = (DefaultArtifactDescriptorReader)lookup(ArtifactDescriptorReader.class);
+        DefaultArtifactDescriptorReader pomReader =
+            (DefaultArtifactDescriptorReader) lookup( ArtifactDescriptorReader.class );
+
         pomReader.setArtifactResolver( resolver );
 
         projectBuilder = lookup( ProjectBuilder.class, "classpath" );
@@ -70,55 +73,98 @@ public class ProjectClasspathTest
         checkArtifactIdScope( project, "runtime", "runtime" );
         checkArtifactIdScope( project, "default", "compile" );
 
-        // check all transitive deps of a test dependency are test, except test and provided which is skipped
-        artifact = getArtifact( project, "maven-test-test", "scope-provided" );
-        assertNull( "Check no provided dependencies are transitive", artifact );
-        artifact = getArtifact( project, "maven-test-test", "scope-test" );
-        assertNull( "Check no test dependencies are transitive", artifact );
-
-        artifact = getArtifact( project, "maven-test-test", "scope-compile" );
-        assertNotNull( artifact );
-
-        System.out.println( "a = " + artifact );
-        System.out.println( "b = " + artifact.getScope() );
-        assertEquals( "Check scope", "test", artifact.getScope() );
+        // check transitive dependencies of test scope dependency
         artifact = getArtifact( project, "maven-test-test", "scope-default" );
-        assertEquals( "Check scope", "test", artifact.getScope() );
+        assertNull( "Unexpected transitive dependency of test dependency", artifact );
+        artifact = getArtifact( project, "maven-test-test", "scope-test" );
+        assertNull( "Unexpected transitive dependency of test dependency", artifact );
         artifact = getArtifact( project, "maven-test-test", "scope-runtime" );
-        assertEquals( "Check scope", "test", artifact.getScope() );
+        assertNull( "Unexpected transitive dependency of test dependency", artifact );
+        artifact = getArtifact( project, "maven-test-test", "scope-compile" );
+        assertNull( "Unexpected transitive dependency of test dependency", artifact );
+        artifact = getArtifact( project, "maven-test-test", "scope-provided" );
+        assertNull( "Unexpected transitive dependency of test dependency", artifact );
 
-        // check all transitive deps of a provided dependency are provided scope, except for test
-        checkGroupIdScope( project, "provided", "maven-test-provided" );
+        // check transitive dependencies of provided scope dependency
+        artifact = getArtifact( project, "maven-test-provided", "scope-default" );
+        assertNull( "Unexpected transitive dependency of provided dependency", artifact );
+        artifact = getArtifact( project, "maven-test-provided", "scope-test" );
+        assertNull( "Unexpected transitive dependency of provided dependency", artifact );
         artifact = getArtifact( project, "maven-test-provided", "scope-runtime" );
-        assertEquals( "Check scope", "provided", artifact.getScope() );
+        assertNull( "Unexpected transitive dependency of provided dependency", artifact );
+        artifact = getArtifact( project, "maven-test-provided", "scope-compile" );
+        assertNull( "Unexpected transitive dependency of provided dependency", artifact );
+        artifact = getArtifact( project, "maven-test-provided", "scope-provided" );
+        assertNull( "Unexpected transitive dependency of provided dependency", artifact );
+
+        // check transitive dependencies of runtime scope dependency
+        artifact = getArtifact( project, "maven-test-runtime", "scope-default" );
+        assertNotNull( "Expected transitive dependency", artifact );
+        assertEquals( "Expected transitive runtime scope", "runtime", artifact.getScope() );
+
+        artifact = getArtifact( project, "maven-test-runtime", "scope-test" );
+        assertNull( "Unexpected transitive dependency", artifact );
+
+        artifact = getArtifact( project, "maven-test-runtime", "scope-runtime" );
+        assertNotNull( "Expected transitive dependency", artifact );
+        assertEquals( "Expected transitive runtime scope", "runtime", artifact.getScope() );
+
+        artifact = getArtifact( project, "maven-test-runtime", "scope-compile" );
+        assertNotNull( "Expected transitive dependency", artifact );
+        assertEquals( "Expected transitive runtime scope", "runtime", artifact.getScope() );
+
+        artifact = getArtifact( project, "maven-test-runtime", "scope-provided" );
+        assertNull( "Unexpected transitive dependency", artifact );
 
-        // check all transitive deps of a runtime dependency are runtime scope, except for test
-        checkGroupIdScope( project, "runtime", "maven-test-runtime" );
         artifact = getArtifact( project, "maven-test-runtime", "scope-runtime" );
-        assertEquals( "Check scope", "runtime", artifact.getScope() );
+        assertNotNull( "Expected transitive dependency", artifact );
+        assertEquals( "Expected transitive runtime scope", "runtime", artifact.getScope() );
+
+        // check transitive dependencies of compile scope dependency
+        artifact = getArtifact( project, "maven-test-compile", "scope-default" );
+        assertNotNull( "Expected transitive dependency", artifact );
+        assertEquals( "Expected transitive compile scope", "compile", artifact.getScope() );
+
+        artifact = getArtifact( project, "maven-test-compile", "scope-test" );
+        assertNull( "Unexpected transitive dependency", artifact );
+
+        artifact = getArtifact( project, "maven-test-compile", "scope-runtime" );
+        assertNotNull( "Expected transitive dependency", artifact );
+        assertEquals( "Expected transitive runtime scope", "runtime", artifact.getScope() );
+
+        artifact = getArtifact( project, "maven-test-compile", "scope-compile" );
+        assertNotNull( "Expected transitive dependency", artifact );
+        assertEquals( "Expected transitive compile scope", "compile", artifact.getScope() );
+
+        artifact = getArtifact( project, "maven-test-compile", "scope-provided" );
+        assertNull( "Unexpected transitive dependency", artifact );
 
-        // check all transitive deps of a compile dependency are compile scope, except for runtime and test
-        checkGroupIdScope( project, "compile", "maven-test-compile" );
         artifact = getArtifact( project, "maven-test-compile", "scope-runtime" );
-        assertEquals( "Check scope", "runtime", artifact.getScope() );
+        assertNotNull( "Expected transitive dependency", artifact );
+        assertEquals( "Expected transitive runtime scope", "runtime", artifact.getScope() );
+
+        // check transitive dependencies of default scope dependency
+        artifact = getArtifact( project, "maven-test-default", "scope-default" );
+        assertNotNull( "Expected transitive dependency", artifact );
+        assertEquals( "Expected transitive compile scope", "compile", artifact.getScope() );
+
+        artifact = getArtifact( project, "maven-test-default", "scope-test" );
+        assertNull( "Unexpected transitive dependency", artifact );
 
-        // check all transitive deps of a default dependency are compile scope, except for runtime and test
-        checkGroupIdScope( project, "compile", "maven-test-default" );
         artifact = getArtifact( project, "maven-test-default", "scope-runtime" );
-        assertEquals( "Check scope", "runtime", artifact.getScope() );
-    }
+        assertNotNull( "Expected transitive dependency", artifact );
+        assertEquals( "Expected transitive runtime scope", "runtime", artifact.getScope() );
 
-    private void checkGroupIdScope( MavenProject project, String scopeValue, String groupId )
-    {
-        Artifact artifact;
-        artifact = getArtifact( project, groupId, "scope-compile" );
-        assertEquals( "Check scope", scopeValue, artifact.getScope() );
-        artifact = getArtifact( project, groupId, "scope-test" );
-        assertNull( "Check test dependency is not transitive", artifact );
-        artifact = getArtifact( project, groupId, "scope-provided" );
-        assertNull( "Check provided dependency is not transitive", artifact );
-        artifact = getArtifact( project, groupId, "scope-default" );
-        assertEquals( "Check scope", scopeValue, artifact.getScope() );
+        artifact = getArtifact( project, "maven-test-default", "scope-compile" );
+        assertNotNull( "Expected transitive dependency", artifact );
+        assertEquals( "Expected transitive compile scope", "compile", artifact.getScope() );
+
+        artifact = getArtifact( project, "maven-test-default", "scope-provided" );
+        assertNull( "Unexpected transitive dependency", artifact );
+
+        artifact = getArtifact( project, "maven-test-default", "scope-runtime" );
+        assertNotNull( "Expected transitive dependency", artifact );
+        assertEquals( "Expected transitive runtime scope", "runtime", artifact.getScope() );
     }
 
     private void checkArtifactIdScope( MavenProject project, String scope, String scopeValue )

http://git-wip-us.apache.org/repos/asf/maven/blob/bec76204/maven-compat/src/test/resources/projects/scope/transitive-compile-dep.xml
----------------------------------------------------------------------
diff --git a/maven-compat/src/test/resources/projects/scope/transitive-compile-dep.xml b/maven-compat/src/test/resources/projects/scope/transitive-compile-dep.xml
index 1161c69..558b53f 100644
--- a/maven-compat/src/test/resources/projects/scope/transitive-compile-dep.xml
+++ b/maven-compat/src/test/resources/projects/scope/transitive-compile-dep.xml
@@ -52,6 +52,12 @@ under the License.
       <version>1.0</version>
       <scope>compile</scope>
     </dependency>
-  </dependencies>
 
+    <dependency>
+      <groupId>maven-test-compile</groupId>
+      <artifactId>scope-provided</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
 </project>

http://git-wip-us.apache.org/repos/asf/maven/blob/bec76204/maven-compat/src/test/resources/projects/scope/transitive-default-dep.xml
----------------------------------------------------------------------
diff --git a/maven-compat/src/test/resources/projects/scope/transitive-default-dep.xml b/maven-compat/src/test/resources/projects/scope/transitive-default-dep.xml
index c904be0..20c186a 100644
--- a/maven-compat/src/test/resources/projects/scope/transitive-default-dep.xml
+++ b/maven-compat/src/test/resources/projects/scope/transitive-default-dep.xml
@@ -53,6 +53,11 @@ under the License.
       <scope>compile</scope>
     </dependency>
 
+    <dependency>
+      <groupId>maven-test-default</groupId>
+      <artifactId>scope-provided</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+    </dependency>
   </dependencies>
-
 </project>

http://git-wip-us.apache.org/repos/asf/maven/blob/bec76204/maven-compat/src/test/resources/projects/scope/transitive-provided-dep.xml
----------------------------------------------------------------------
diff --git a/maven-compat/src/test/resources/projects/scope/transitive-provided-dep.xml b/maven-compat/src/test/resources/projects/scope/transitive-provided-dep.xml
index b85669c..219218c 100644
--- a/maven-compat/src/test/resources/projects/scope/transitive-provided-dep.xml
+++ b/maven-compat/src/test/resources/projects/scope/transitive-provided-dep.xml
@@ -52,6 +52,12 @@ under the License.
       <version>1.0</version>
       <scope>compile</scope>
     </dependency>
-  </dependencies>
 
+    <dependency>
+      <groupId>maven-test-provided</groupId>
+      <artifactId>scope-provided</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
 </project>

http://git-wip-us.apache.org/repos/asf/maven/blob/bec76204/maven-compat/src/test/resources/projects/scope/transitive-runtime-dep.xml
----------------------------------------------------------------------
diff --git a/maven-compat/src/test/resources/projects/scope/transitive-runtime-dep.xml b/maven-compat/src/test/resources/projects/scope/transitive-runtime-dep.xml
index 921723c..c63852f 100644
--- a/maven-compat/src/test/resources/projects/scope/transitive-runtime-dep.xml
+++ b/maven-compat/src/test/resources/projects/scope/transitive-runtime-dep.xml
@@ -53,6 +53,11 @@ under the License.
       <scope>compile</scope>
     </dependency>
 
+    <dependency>
+      <groupId>maven-test-runtime</groupId>
+      <artifactId>scope-provided</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+    </dependency>
   </dependencies>
-
 </project>

http://git-wip-us.apache.org/repos/asf/maven/blob/bec76204/maven-compat/src/test/resources/projects/scope/transitive-test-dep.xml
----------------------------------------------------------------------
diff --git a/maven-compat/src/test/resources/projects/scope/transitive-test-dep.xml b/maven-compat/src/test/resources/projects/scope/transitive-test-dep.xml
index ea2dde9..8230d58 100644
--- a/maven-compat/src/test/resources/projects/scope/transitive-test-dep.xml
+++ b/maven-compat/src/test/resources/projects/scope/transitive-test-dep.xml
@@ -53,6 +53,11 @@ under the License.
       <scope>compile</scope>
     </dependency>
 
+    <dependency>
+      <groupId>maven-test-test</groupId>
+      <artifactId>scope-provided</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+    </dependency>
   </dependencies>
-
 </project>