You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by el...@apache.org on 2021/06/20 23:38:38 UTC

[maven-dependency-analyzer] branch master updated: [MDEP-753] handle different classes from same artifact used by model and test code (#37)

This is an automated email from the ASF dual-hosted git repository.

elharo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-dependency-analyzer.git


The following commit(s) were added to refs/heads/master by this push:
     new eb558f7  [MDEP-753] handle different classes from same artifact used by model and test code (#37)
eb558f7 is described below

commit eb558f71487f9ffd29ebff4c11de623fbe5107a7
Author: Elliotte Rusty Harold <el...@users.noreply.github.com>
AuthorDate: Sun Jun 20 23:38:28 2021 +0000

    [MDEP-753] handle different classes from same artifact used by model and test code (#37)
    
    * test to demonstrate failure
    * fix the bug
---
 .../analyzer/DefaultProjectDependencyAnalyzer.java    | 19 ++++++++++++++++---
 .../DefaultProjectDependencyAnalyzerTest.java         |  8 ++++++--
 .../jarWithCompileDependency/project2/pom.xml         |  5 +++++
 .../jarWithCompileDependency/project2/Project2.java   |  2 ++
 .../project2/Project2Test.java}                       | 12 ++++--------
 5 files changed, 33 insertions(+), 13 deletions(-)

diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java
index b4b505c..cb44ddc 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java
@@ -67,15 +67,18 @@ public class DefaultProjectDependencyAnalyzer
             Map<Artifact, Set<String>> artifactClassMap = buildArtifactClassMap( project );
 
             Set<String> dependencyClasses = buildDependencyClasses( project );
+            Set<String> mainDependencyClasses = buildMainDependencyClasses( project );
 
             Set<String> testOnlyDependencyClasses = buildTestDependencyClasses( project );
 
             Set<Artifact> declaredArtifacts = buildDeclaredArtifacts( project );
 
             Set<Artifact> usedArtifacts = buildUsedArtifacts( artifactClassMap, dependencyClasses );
-
-            Set<Artifact> testOnlyArtifacts = buildUsedArtifacts( artifactClassMap, testOnlyDependencyClasses );
-
+            Set<Artifact> mainUsedArtifacts = buildUsedArtifacts( artifactClassMap, mainDependencyClasses );
+            
+            Set<Artifact> testArtifacts = buildUsedArtifacts( artifactClassMap, testOnlyDependencyClasses );
+            Set<Artifact> testOnlyArtifacts = removeAll( testArtifacts, mainUsedArtifacts );
+            
             Set<Artifact> usedDeclaredArtifacts = new LinkedHashSet<>( declaredArtifacts );
             usedDeclaredArtifacts.retainAll( usedArtifacts );
 
@@ -226,6 +229,16 @@ public class DefaultProjectDependencyAnalyzer
 
         return dependencyClasses;
     }
+    
+    private Set<String> buildMainDependencyClasses( MavenProject project )
+                    throws IOException
+    {
+
+        String outputDirectory = project.getBuild().getOutputDirectory();
+        Set<String> dependencyClasses = new HashSet<>( buildDependencyClasses( outputDirectory ) );
+
+        return dependencyClasses;
+    }
 
     private Set<String> buildDependencyClasses( String path )
         throws IOException
diff --git a/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzerTest.java b/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzerTest.java
index ffbe626..ebb85fa 100644
--- a/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzerTest.java
+++ b/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzerTest.java
@@ -183,10 +183,14 @@ public class DefaultProjectDependencyAnalyzerTest
         }
 
         ProjectDependencyAnalysis actualAnalysis = analyzer.analyze( project2 );
+        
+        assertTrue( "Incorrectly classified Guava as testonly",
+                   actualAnalysis.getTestArtifactsWithNonTestScope().isEmpty() );
 
         Artifact project1 = createArtifact( "org.apache.maven.shared.dependency-analyzer.tests",
                                             "jarWithCompileDependency1", "jar", "1.0", "compile" );
-        Set<Artifact> usedDeclaredArtifacts = Collections.singleton( project1 );
+        Artifact guava = createArtifact( "com.google.guava", "guava", "jar", "30.1.1-android", "compile" );
+        Set<Artifact> usedDeclaredArtifacts = new HashSet<>( Arrays.asList( project1, guava ) );
         ProjectDependencyAnalysis expectedAnalysis = new ProjectDependencyAnalysis( usedDeclaredArtifacts, null, null,
                 null );
 
@@ -237,7 +241,7 @@ public class DefaultProjectDependencyAnalyzerTest
         MavenProject project2 = getProject( "jarWithTestDependency/project2/pom.xml" );
 
         ProjectDependencyAnalysis actualAnalysis = analyzer.analyze( project2 );
-
+        
         Artifact project1 = createArtifact( "org.apache.maven.shared.dependency-analyzer.tests",
                                             "jarWithTestDependency1", "jar", "1.0", "test" );
         Artifact junit = createArtifact( "junit", "junit", "jar", "3.8.1", "test" );
diff --git a/src/test/resources/jarWithCompileDependency/project2/pom.xml b/src/test/resources/jarWithCompileDependency/project2/pom.xml
index d68784a..bc920b8 100644
--- a/src/test/resources/jarWithCompileDependency/project2/pom.xml
+++ b/src/test/resources/jarWithCompileDependency/project2/pom.xml
@@ -36,6 +36,11 @@
 			<artifactId>jarWithCompileDependency1</artifactId>
 			<version>1.0</version>
 		</dependency>
+		<dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>30.1.1-android</version>
+        </dependency>
 	</dependencies>	
 	
 </project>
diff --git a/src/test/resources/jarWithCompileDependency/project2/src/main/java/jarWithCompileDependency/project2/Project2.java b/src/test/resources/jarWithCompileDependency/project2/src/main/java/jarWithCompileDependency/project2/Project2.java
index 5bc71ce..c634c86 100644
--- a/src/test/resources/jarWithCompileDependency/project2/src/main/java/jarWithCompileDependency/project2/Project2.java
+++ b/src/test/resources/jarWithCompileDependency/project2/src/main/java/jarWithCompileDependency/project2/Project2.java
@@ -20,6 +20,7 @@ package jarWithCompileDependency.project2;
  */
 
 import jarWithCompileDependency.project1.Project1;
+import com.google.common.base.Strings;
 
 /**
  * 
@@ -31,5 +32,6 @@ public class Project2
     public Project2()
     {
         Project1 project = new Project1();
+        System.out.println(Strings.emptyToNull("this"));
     }
 }
diff --git a/src/test/resources/jarWithCompileDependency/project2/src/main/java/jarWithCompileDependency/project2/Project2.java b/src/test/resources/jarWithCompileDependency/project2/src/test/java/jarWithCompileDependency/project2/Project2Test.java
similarity index 84%
copy from src/test/resources/jarWithCompileDependency/project2/src/main/java/jarWithCompileDependency/project2/Project2.java
copy to src/test/resources/jarWithCompileDependency/project2/src/test/java/jarWithCompileDependency/project2/Project2Test.java
index 5bc71ce..ea8eb88 100644
--- a/src/test/resources/jarWithCompileDependency/project2/src/main/java/jarWithCompileDependency/project2/Project2.java
+++ b/src/test/resources/jarWithCompileDependency/project2/src/test/java/jarWithCompileDependency/project2/Project2Test.java
@@ -20,16 +20,12 @@ package jarWithCompileDependency.project2;
  */
 
 import jarWithCompileDependency.project1.Project1;
+import com.google.common.base.Preconditions;
 
-/**
- * 
- * 
- * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
- */
-public class Project2
+public class Project2Test
 {
-    public Project2()
+    public Project2Test()
     {
-        Project1 project = new Project1();
+        Preconditions.checkNotNull("");
     }
 }