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("");
}
}