From 300fd5956c039980ac31de7e107779c28ff8d220 Mon Sep 17 00:00:00 2001 From: "hongbo.weihb" Date: Thu, 5 May 2022 15:27:18 +0800 Subject: [PATCH 1/5] Fix the problem that the dependency tree is different when DF and BF strategies are adopted when a dependency package has no indirect dependency. Signed-off-by: hongbo.weihb --- .../impl/collect/bf/BfDependencyCollector.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java index 4beca7990..78e81ea65 100644 --- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java +++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java @@ -448,9 +448,17 @@ private void processDependency( Args args, Results results, DependencyProcessing context.getParent().getChildren().add( child ); boolean recurse = traverse && !descriptorResult.getDependencies().isEmpty(); + DependencyProcessingContext parentContext = context.withDependency( d ); if ( recurse ) { - doRecurse( args, context.withDependency( d ), descriptorResult, child ); + doRecurse( args, parentContext, descriptorResult, child ); + } + else + { + List parents = new ArrayList<>( parentContext.parents.size() + 1 ); + parents.addAll( parentContext.parents ); + parents.add( child ); + args.skipper.cache( child, parents ); } } } From 586eaadf358dba607dd2be10ff3756b064aed20f Mon Sep 17 00:00:00 2001 From: "hongbo.weihb" Date: Thu, 5 May 2022 19:36:30 +0800 Subject: [PATCH 2/5] add ut for test BfDependencyCollector collectDependencies on description dependencies is empty Signed-off-by: hongbo.weihb --- .../dependencies-empty/gid_a_ver.ini | 4 ++++ .../dependencies-empty/gid_b_ver.ini | 2 ++ .../dependencies-empty/gid_c_ver.ini | 2 ++ .../artifact-descriptions/dependencies-empty/gid_d_1.ini | 1 + .../artifact-descriptions/dependencies-empty/gid_d_2.ini | 2 ++ .../dependencies-empty/gid_e_ver.ini | 2 ++ .../dependencies-empty/gid_f_ver.ini | 2 ++ .../artifact-descriptions/dependencies-empty/gid_g_1.ini | 2 ++ .../artifact-descriptions/dependencies-empty/gid_g_2.ini | 2 ++ .../artifact-descriptions/dependencies-empty/gid_h_1.ini | 1 + .../artifact-descriptions/dependencies-empty/gid_h_2.ini | 1 + .../expectedSubtreeOnDescriptorDependenciesEmpty.txt | 8 ++++++++ 12 files changed, 29 insertions(+) create mode 100644 maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_a_ver.ini create mode 100644 maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_b_ver.ini create mode 100644 maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_c_ver.ini create mode 100644 maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_1.ini create mode 100644 maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_2.ini create mode 100644 maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_e_ver.ini create mode 100644 maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_f_ver.ini create mode 100644 maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_1.ini create mode 100644 maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_2.ini create mode 100644 maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_1.ini create mode 100644 maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_2.ini create mode 100644 maven-resolver-impl/src/test/resources/artifact-descriptions/expectedSubtreeOnDescriptorDependenciesEmpty.txt diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_a_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_a_ver.ini new file mode 100644 index 000000000..f5c8d60e8 --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_a_ver.ini @@ -0,0 +1,4 @@ +[dependencies] +gid:b:jar:ver +gid:c:jar:ver +gid:e:jar:ver diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_b_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_b_ver.ini new file mode 100644 index 000000000..4a016c056 --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_b_ver.ini @@ -0,0 +1,2 @@ +[dependencies] +gid:d:jar:1 \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_c_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_c_ver.ini new file mode 100644 index 000000000..33a9d26c4 --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_c_ver.ini @@ -0,0 +1,2 @@ +[dependencies] +gid:d:jar:2 \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_1.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_1.ini new file mode 100644 index 000000000..05ba453ac --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_1.ini @@ -0,0 +1 @@ +[dependencies] \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_2.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_2.ini new file mode 100644 index 000000000..39318dad1 --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_2.ini @@ -0,0 +1,2 @@ +[dependencies] +gid:g:jar:1 \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_e_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_e_ver.ini new file mode 100644 index 000000000..1753baca6 --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_e_ver.ini @@ -0,0 +1,2 @@ +[dependencies] +gid:f:jar:ver \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_f_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_f_ver.ini new file mode 100644 index 000000000..a456e7128 --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_f_ver.ini @@ -0,0 +1,2 @@ +[dependencies] +gid:g:jar:2 \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_1.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_1.ini new file mode 100644 index 000000000..ce535a50d --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_1.ini @@ -0,0 +1,2 @@ +[dependencies] +gid:h:jar:1 \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_2.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_2.ini new file mode 100644 index 000000000..41cd235f6 --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_2.ini @@ -0,0 +1,2 @@ +[dependencies] +gid:h:jar:2 \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_1.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_1.ini new file mode 100644 index 000000000..05ba453ac --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_1.ini @@ -0,0 +1 @@ +[dependencies] \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_2.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_2.ini new file mode 100644 index 000000000..05ba453ac --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_2.ini @@ -0,0 +1 @@ +[dependencies] \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/expectedSubtreeOnDescriptorDependenciesEmpty.txt b/maven-resolver-impl/src/test/resources/artifact-descriptions/expectedSubtreeOnDescriptorDependenciesEmpty.txt new file mode 100644 index 000000000..889b64f8a --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/expectedSubtreeOnDescriptorDependenciesEmpty.txt @@ -0,0 +1,8 @@ +gid:a:jar:ver ++- gid:b:jar:ver compile +| \- gid:d:jar:1 compile ++- gid:c:jar:ver compile +\- gid:e:jar:ver compile +| +- gid:f:jar:ver compile +| | +- gid:g:jar:2 compile +| | | \- gid:h:jar:2 compile \ No newline at end of file From 3599112010244bd95f9bb4f9a70ecd5fe44d11b5 Mon Sep 17 00:00:00 2001 From: "hongbo.weihb" Date: Thu, 5 May 2022 20:03:07 +0800 Subject: [PATCH 3/5] add ut for test BfDependencyCollector collectDependencies on descriptor dependencies is empty Signed-off-by: hongbo.weihb --- .../collect/bf/BfDependencyCollectorTest.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollectorTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollectorTest.java index ea162f945..2a1dbea53 100644 --- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollectorTest.java +++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollectorTest.java @@ -61,6 +61,11 @@ import org.eclipse.aether.util.graph.manager.DefaultDependencyManager; import org.eclipse.aether.util.graph.manager.DependencyManagerUtils; import org.eclipse.aether.util.graph.manager.TransitiveDependencyManager; +import org.eclipse.aether.util.graph.transformer.ConflictResolver; +import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver; +import org.eclipse.aether.util.graph.transformer.JavaScopeSelector; +import org.eclipse.aether.util.graph.transformer.NearestVersionSelector; +import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector; import org.eclipse.aether.util.graph.version.HighestVersionFilter; import org.junit.Before; import org.junit.Test; @@ -576,6 +581,26 @@ public void testVersionFilter() assertEquals( 1, result.getRoot().getChildren().size() ); } + + @Test + public void testDescriptorDependenciesEmpty() + throws Exception + { + DependencyNode root = parser.parseResource("expectedSubtreeOnDescriptorDependenciesEmpty.txt"); + Dependency dependency = root.getDependency(); + CollectRequest request = new CollectRequest(dependency, Arrays.asList(repository)); + + collector.setArtifactDescriptorReader(newReader("dependencies-empty/")); + + session.setDependencyGraphTransformer(new ConflictResolver( + new NearestVersionSelector(), new JavaScopeSelector(), new SimpleOptionalitySelector(), + new JavaScopeDeriver() + )); + + CollectResult result = collector.collectDependencies(session, request); + assertEqualSubtree(root, result.getRoot()); + } + static class TestDependencyManager implements DependencyManager { From 82e306c1862eec5266f27aecffd6aea04827b037 Mon Sep 17 00:00:00 2001 From: "hongbo.weihb" Date: Thu, 5 May 2022 22:04:42 +0800 Subject: [PATCH 4/5] skipper.cache only if not skipResolution Signed-off-by: hongbo.weihb --- .../aether/internal/impl/collect/bf/BfDependencyCollector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java index 78e81ea65..d68a92084 100644 --- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java +++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java @@ -453,7 +453,7 @@ private void processDependency( Args args, Results results, DependencyProcessing { doRecurse( args, parentContext, descriptorResult, child ); } - else + else if(!args.skipper.skipResolution( child, parentContext.parents )) { List parents = new ArrayList<>( parentContext.parents.size() + 1 ); parents.addAll( parentContext.parents ); From e6e18795a6ebee2d4aa217062b0115c13db60074 Mon Sep 17 00:00:00 2001 From: "hongbo.weihb" Date: Thu, 5 May 2022 22:11:35 +0800 Subject: [PATCH 5/5] add spaces for format Signed-off-by: hongbo.weihb --- .../aether/internal/impl/collect/bf/BfDependencyCollector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java index d68a92084..4c41d40c9 100644 --- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java +++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java @@ -453,7 +453,7 @@ private void processDependency( Args args, Results results, DependencyProcessing { doRecurse( args, parentContext, descriptorResult, child ); } - else if(!args.skipper.skipResolution( child, parentContext.parents )) + else if ( !args.skipper.skipResolution( child, parentContext.parents ) ) { List parents = new ArrayList<>( parentContext.parents.size() + 1 ); parents.addAll( parentContext.parents );