You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2025/10/10 11:00:50 UTC
(maven) branch maven-4.0.x updated: [maven-4.0.x] Resolver 2.0.13 (#11137) (#11248)
This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch maven-4.0.x
in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/maven-4.0.x by this push:
new 8134db6f3c [maven-4.0.x] Resolver 2.0.13 (#11137) (#11248)
8134db6f3c is described below
commit 8134db6f3c18ab2c68764a5ae05c9e08846b9787
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Fri Oct 10 13:00:44 2025 +0200
[maven-4.0.x] Resolver 2.0.13 (#11137) (#11248)
Resolver 2.0.13 has fixed several bugs and issues from 2.0.11 causing endless loops/stack overflow with some more complex graphs.
Changes in ITs:
* classpath string is now levelOrder (not preOrder as Maven 3)
* error string comparison that fits apache and jdk transport (error message is slightly different)
Backport of 14d6d44ad9f3f8867ec6996abed98cc0ab2bcaef
---
.../AbstractArtifactComponentTestCase.java | 2 +-
.../internal/MavenSessionBuilderSupplier.java | 5 ++-
.../impl/standalone/RepositorySystemSupplier.java | 12 ++++--
.../testing/stubs/RepositorySystemSupplier.java | 6 ++-
...ng3477DependencyResolutionErrorMessageTest.java | 4 +-
.../MavenITmng3813PluginClassPathOrderingTest.java | 43 ++++++++++++++++++----
pom.xml | 2 +-
7 files changed, 55 insertions(+), 19 deletions(-)
diff --git a/compat/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java b/compat/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java
index 5214640c93..206fc6245c 100644
--- a/compat/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java
+++ b/compat/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java
@@ -310,7 +310,7 @@ protected DefaultRepositorySystemSession initRepoSession() throws Exception {
DependencyTraverser depTraverser = new FatArtifactTraverser();
session.setDependencyTraverser(depTraverser);
- DependencyManager depManager = new ClassicDependencyManager(true, session.getScopeManager());
+ DependencyManager depManager = new ClassicDependencyManager(session.getScopeManager());
session.setDependencyManager(depManager);
DependencySelector depFilter = new AndDependencySelector(
diff --git a/compat/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenSessionBuilderSupplier.java b/compat/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenSessionBuilderSupplier.java
index d0f985a083..0ee5153321 100644
--- a/compat/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenSessionBuilderSupplier.java
+++ b/compat/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenSessionBuilderSupplier.java
@@ -43,6 +43,7 @@
import org.eclipse.aether.resolution.ArtifactDescriptorPolicy;
import org.eclipse.aether.util.artifact.DefaultArtifactTypeRegistry;
import org.eclipse.aether.util.graph.manager.ClassicDependencyManager;
+import org.eclipse.aether.util.graph.manager.TransitiveDependencyManager;
import org.eclipse.aether.util.graph.selector.AndDependencySelector;
import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
@@ -95,7 +96,9 @@ protected DependencyManager getDependencyManager() {
}
public DependencyManager getDependencyManager(boolean transitive) {
- return new ClassicDependencyManager(transitive, getScopeManager());
+ return transitive
+ ? new TransitiveDependencyManager(getScopeManager())
+ : new ClassicDependencyManager(getScopeManager());
}
protected DependencySelector getDependencySelector() {
diff --git a/impl/maven-impl/src/main/java/org/apache/maven/impl/standalone/RepositorySystemSupplier.java b/impl/maven-impl/src/main/java/org/apache/maven/impl/standalone/RepositorySystemSupplier.java
index 36197566df..015f5ba38c 100644
--- a/impl/maven-impl/src/main/java/org/apache/maven/impl/standalone/RepositorySystemSupplier.java
+++ b/impl/maven-impl/src/main/java/org/apache/maven/impl/standalone/RepositorySystemSupplier.java
@@ -195,12 +195,14 @@ static BasicRepositoryConnectorFactory newBasicRepositoryConnectorFactory(
TransporterProvider transporterProvider,
RepositoryLayoutProvider layoutProvider,
ChecksumPolicyProvider checksumPolicyProvider,
+ PathProcessor pathProcessor,
ChecksumProcessor checksumProcessor,
Map<String, ProvidedChecksumsSource> providedChecksumsSources) {
return new BasicRepositoryConnectorFactory(
transporterProvider,
layoutProvider,
checksumPolicyProvider,
+ pathProcessor,
checksumProcessor,
providedChecksumsSources);
}
@@ -251,8 +253,8 @@ static RemoteRepositoryFilterManager newRemoteRepositoryFilterManager(
@Provides
@Named(GroupIdRemoteRepositoryFilterSource.NAME)
static GroupIdRemoteRepositoryFilterSource newGroupIdRemoteRepositoryFilterSource(
- RepositorySystemLifecycle repositorySystemLifecycle) {
- return new GroupIdRemoteRepositoryFilterSource(repositorySystemLifecycle);
+ RepositorySystemLifecycle repositorySystemLifecycle, PathProcessor pathProcessor) {
+ return new GroupIdRemoteRepositoryFilterSource(repositorySystemLifecycle, pathProcessor);
}
@Provides
@@ -566,8 +568,10 @@ static SparseDirectoryTrustedChecksumsSource newSparseDirectoryTrustedChecksumsS
@Provides
@Named(SummaryFileTrustedChecksumsSource.NAME)
static SummaryFileTrustedChecksumsSource newSummaryFileTrustedChecksumsSource(
- LocalPathComposer localPathComposer, RepositorySystemLifecycle repositorySystemLifecycle) {
- return new SummaryFileTrustedChecksumsSource(localPathComposer, repositorySystemLifecycle);
+ LocalPathComposer localPathComposer,
+ RepositorySystemLifecycle repositorySystemLifecycle,
+ PathProcessor pathProcessor) {
+ return new SummaryFileTrustedChecksumsSource(localPathComposer, repositorySystemLifecycle, pathProcessor);
}
@Provides
diff --git a/impl/maven-testing/src/main/java/org/apache/maven/api/plugin/testing/stubs/RepositorySystemSupplier.java b/impl/maven-testing/src/main/java/org/apache/maven/api/plugin/testing/stubs/RepositorySystemSupplier.java
index 0ba6036253..c31d266d18 100644
--- a/impl/maven-testing/src/main/java/org/apache/maven/api/plugin/testing/stubs/RepositorySystemSupplier.java
+++ b/impl/maven-testing/src/main/java/org/apache/maven/api/plugin/testing/stubs/RepositorySystemSupplier.java
@@ -541,7 +541,7 @@ protected Map<String, RemoteRepositoryFilterSource> createRemoteRepositoryFilter
HashMap<String, RemoteRepositoryFilterSource> result = new HashMap<>();
result.put(
GroupIdRemoteRepositoryFilterSource.NAME,
- new GroupIdRemoteRepositoryFilterSource(getRepositorySystemLifecycle()));
+ new GroupIdRemoteRepositoryFilterSource(getRepositorySystemLifecycle(), getPathProcessor()));
result.put(
PrefixesRemoteRepositoryFilterSource.NAME,
new PrefixesRemoteRepositoryFilterSource(
@@ -608,7 +608,8 @@ protected Map<String, TrustedChecksumsSource> createTrustedChecksumsSources() {
new SparseDirectoryTrustedChecksumsSource(getChecksumProcessor(), getLocalPathComposer()));
result.put(
SummaryFileTrustedChecksumsSource.NAME,
- new SummaryFileTrustedChecksumsSource(getLocalPathComposer(), getRepositorySystemLifecycle()));
+ new SummaryFileTrustedChecksumsSource(
+ getLocalPathComposer(), getRepositorySystemLifecycle(), getPathProcessor()));
return result;
}
@@ -709,6 +710,7 @@ protected BasicRepositoryConnectorFactory createBasicRepositoryConnectorFactory(
getTransporterProvider(),
getRepositoryLayoutProvider(),
getChecksumPolicyProvider(),
+ getPathProcessor(),
getChecksumProcessor(),
getProvidedChecksumsSources());
}
diff --git a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng3477DependencyResolutionErrorMessageTest.java b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng3477DependencyResolutionErrorMessageTest.java
index 5ec5fa8c0f..1b2dbfd9a0 100644
--- a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng3477DependencyResolutionErrorMessageTest.java
+++ b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng3477DependencyResolutionErrorMessageTest.java
@@ -93,10 +93,10 @@ void connectionProblems() throws Exception {
void connectionProblemsPlugin() throws Exception {
testit(
54312,
- new String[] {
+ new String[] { // JDK "Connection to..." Apache "Connect to..."
".*The following artifacts could not be resolved: org.apache.maven.its.plugins:maven-it-plugin-not-exists:pom:1.2.3 \\(absent\\): "
+ "Could not transfer artifact org.apache.maven.its.plugins:maven-it-plugin-not-exists:pom:1.2.3 from/to "
- + "central \\(http://localhost:.*/repo\\): Connection to http://localhost:.*2/repo/ refused.*"
+ + "central \\(http://localhost:.*/repo\\):.*Connect.*refused.*"
},
"pom-plugin.xml");
}
diff --git a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng3813PluginClassPathOrderingTest.java b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng3813PluginClassPathOrderingTest.java
index 0331f30fe4..bee5c78a5b 100644
--- a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng3813PluginClassPathOrderingTest.java
+++ b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng3813PluginClassPathOrderingTest.java
@@ -68,13 +68,40 @@ public void testitMNG3813() throws Exception {
assertEquals("8", pclProps.getProperty(resName + ".count"));
- assertTrue(pclProps.getProperty(resName + ".0").endsWith("/dep-a-0.1.jar!/" + resName));
- assertTrue(pclProps.getProperty(resName + ".1").endsWith("/dep-aa-0.1.jar!/" + resName));
- assertTrue(pclProps.getProperty(resName + ".2").endsWith("/dep-ac-0.1.jar!/" + resName));
- assertTrue(pclProps.getProperty(resName + ".3").endsWith("/dep-ab-0.1.jar!/" + resName));
- assertTrue(pclProps.getProperty(resName + ".4").endsWith("/dep-ad-0.1.jar!/" + resName));
- assertTrue(pclProps.getProperty(resName + ".5").endsWith("/dep-c-0.1.jar!/" + resName));
- assertTrue(pclProps.getProperty(resName + ".6").endsWith("/dep-b-0.1.jar!/" + resName));
- assertTrue(pclProps.getProperty(resName + ".7").endsWith("/dep-d-0.1.jar!/" + resName));
+ // The following dependency section spans this dependency tree:
+ // dep-a
+ // dep-aa
+ // dep-ac
+ // dep-ab
+ // dep-ad
+ // dep-c
+ // dep-b
+ // dep-d
+ //
+ // Given this tree, the correct/expected class path using preOrder is:
+ // dep-a, dep-aa, dep-ac, dep-ab, dep-ad, dep-c, dep-b, dep-d
+ // The correct/expected class path using levelOrder is:
+ // dep-a, dep-c, dep-b, dep-d, dep-aa, dep-ac, dep-ab, dep-ad
+ if (matchesVersionRange("[,4.0.0-SNAPSHOT)")) {
+ // preOrder
+ assertTrue(pclProps.getProperty(resName + ".0").endsWith("/dep-a-0.1.jar!/" + resName));
+ assertTrue(pclProps.getProperty(resName + ".1").endsWith("/dep-aa-0.1.jar!/" + resName));
+ assertTrue(pclProps.getProperty(resName + ".2").endsWith("/dep-ac-0.1.jar!/" + resName));
+ assertTrue(pclProps.getProperty(resName + ".3").endsWith("/dep-ab-0.1.jar!/" + resName));
+ assertTrue(pclProps.getProperty(resName + ".4").endsWith("/dep-ad-0.1.jar!/" + resName));
+ assertTrue(pclProps.getProperty(resName + ".5").endsWith("/dep-c-0.1.jar!/" + resName));
+ assertTrue(pclProps.getProperty(resName + ".6").endsWith("/dep-b-0.1.jar!/" + resName));
+ assertTrue(pclProps.getProperty(resName + ".7").endsWith("/dep-d-0.1.jar!/" + resName));
+ } else {
+ // levelOrder
+ assertTrue(pclProps.getProperty(resName + ".0").endsWith("/dep-a-0.1.jar!/" + resName));
+ assertTrue(pclProps.getProperty(resName + ".1").endsWith("/dep-c-0.1.jar!/" + resName));
+ assertTrue(pclProps.getProperty(resName + ".2").endsWith("/dep-b-0.1.jar!/" + resName));
+ assertTrue(pclProps.getProperty(resName + ".3").endsWith("/dep-d-0.1.jar!/" + resName));
+ assertTrue(pclProps.getProperty(resName + ".4").endsWith("/dep-aa-0.1.jar!/" + resName));
+ assertTrue(pclProps.getProperty(resName + ".5").endsWith("/dep-ac-0.1.jar!/" + resName));
+ assertTrue(pclProps.getProperty(resName + ".6").endsWith("/dep-ab-0.1.jar!/" + resName));
+ assertTrue(pclProps.getProperty(resName + ".7").endsWith("/dep-ad-0.1.jar!/" + resName));
+ }
}
}
diff --git a/pom.xml b/pom.xml
index 51a94d33a0..8f8c1ce24f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -163,7 +163,7 @@ under the License.
<plexusInterpolationVersion>1.28</plexusInterpolationVersion>
<plexusTestingVersion>1.6.0</plexusTestingVersion>
<plexusXmlVersion>4.1.0</plexusXmlVersion>
- <resolverVersion>2.0.11</resolverVersion>
+ <resolverVersion>2.0.13</resolverVersion>
<securityDispatcherVersion>4.1.0</securityDispatcherVersion>
<sisuVersion>0.9.0.M4</sisuVersion>
<slf4jVersion>2.0.17</slf4jVersion>