File 0001-Resolver-2.0.11-11043-11115.patch of Package maven
From a86a18222f891b72824d8fab10ada8acd5518d40 Mon Sep 17 00:00:00 2001
From: Tamas Cservenak <tamas@cservenak.net>
Date: Thu, 11 Sep 2025 20:10:34 +0200
Subject: [PATCH] Resolver 2.0.11 (#11043) (#11115)
Update to Resolver 2.0.11.
Changes:
* up to Resolver 2.0.11
* port over required changes (ctor changes mostly in suppliers)
* `TestRepositoryConnector` never dealt with metadata properly, now is getting prefix metadata due RRF, fix it.
Unrelated to resolver changes:
* remove slf4j-simple from maven-compat (emits warnings as maven provider is already present)
* maven-cli fix double/unneeded simplex transfer listener creation
* maven-executor and ITs: externalize Toolbox version for simpler maintenance
---
.../AbstractArtifactComponentTestCase.java | 4 ++--
compat/maven-embedder/pom.xml | 5 ----
.../internal/MavenSessionBuilderSupplier.java | 4 ++--
.../maven/cling/invoker/mvn/MavenContext.java | 2 ++
.../maven/cling/invoker/mvn/MavenInvoker.java | 15 +++++++-----
.../mvn/resident/ResidentMavenInvoker.java | 1 +
.../repository/TestRepositoryConnector.java | 10 +++++---
.../cling/executor/internal/ToolboxTool.java | 24 ++++++++++++++++---
.../cling/executor/impl/ToolboxToolTest.java | 20 +++++++++-------
.../standalone/RepositorySystemSupplier.java | 5 +++-
.../stubs/RepositorySystemSupplier.java | 3 ++-
its/core-it-suite/pom.xml | 2 ++
.../java/org/apache/maven/it/Verifier.java | 2 +-
pom.xml | 2 +-
14 files changed, 66 insertions(+), 33 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 14f394c0c1..5214640c93 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
@@ -69,8 +69,8 @@
import org.eclipse.aether.util.graph.selector.AndDependencySelector;
import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
+import org.eclipse.aether.util.graph.transformer.ConfigurableVersionSelector;
import org.eclipse.aether.util.graph.transformer.ConflictResolver;
-import org.eclipse.aether.util.graph.transformer.NearestVersionSelector;
import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy;
import org.junit.jupiter.api.BeforeEach;
@@ -323,7 +323,7 @@ protected DefaultRepositorySystemSession initRepoSession() throws Exception {
ScopeManagerImpl scopeManager = new ScopeManagerImpl(Maven4ScopeManagerConfiguration.INSTANCE);
session.setScopeManager(scopeManager);
DependencyGraphTransformer transformer = new ConflictResolver(
- new NearestVersionSelector(), new ManagedScopeSelector(scopeManager),
+ new ConfigurableVersionSelector(), new ManagedScopeSelector(scopeManager),
new SimpleOptionalitySelector(), new ManagedScopeDeriver(scopeManager));
transformer =
new ChainedDependencyGraphTransformer(transformer, new ManagedDependencyContextRefiner(scopeManager));
diff --git a/compat/maven-embedder/pom.xml b/compat/maven-embedder/pom.xml
index e32a12be3b..7c1045dfcf 100644
--- a/compat/maven-embedder/pom.xml
+++ b/compat/maven-embedder/pom.xml
@@ -168,11 +168,6 @@ under the License.
<artifactId>logback-classic</artifactId>
<optional>true</optional>
</dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-simple</artifactId>
- <optional>true</optional>
- </dependency>
<dependency>
<groupId>org.jline</groupId>
<artifactId>jansi-core</artifactId>
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 72275546b6..d0f985a083 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
@@ -46,8 +46,8 @@
import org.eclipse.aether.util.graph.selector.AndDependencySelector;
import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
+import org.eclipse.aether.util.graph.transformer.ConfigurableVersionSelector;
import org.eclipse.aether.util.graph.transformer.ConflictResolver;
-import org.eclipse.aether.util.graph.transformer.NearestVersionSelector;
import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy;
@@ -109,7 +109,7 @@ protected DependencySelector getDependencySelector() {
protected DependencyGraphTransformer getDependencyGraphTransformer() {
return new ChainedDependencyGraphTransformer(
new ConflictResolver(
- new NearestVersionSelector(), new ManagedScopeSelector(getScopeManager()),
+ new ConfigurableVersionSelector(), new ManagedScopeSelector(getScopeManager()),
new SimpleOptionalitySelector(), new ManagedScopeDeriver(getScopeManager())),
new ManagedDependencyContextRefiner(getScopeManager()));
}
diff --git a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/MavenContext.java b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/MavenContext.java
index 05e824b53f..c91b9bdb72 100644
--- a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/MavenContext.java
+++ b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/MavenContext.java
@@ -22,6 +22,7 @@
import org.apache.maven.api.cli.InvokerRequest;
import org.apache.maven.api.cli.mvn.MavenOptions;
import org.apache.maven.cling.invoker.LookupContext;
+import org.apache.maven.cling.transfer.SimplexTransferListener;
@SuppressWarnings("VisibilityModifier")
public class MavenContext extends LookupContext {
@@ -29,6 +30,7 @@ public MavenContext(InvokerRequest invokerRequest, boolean containerCapsuleManag
super(invokerRequest, containerCapsuleManaged, mavenOptions);
}
+ public SimplexTransferListener simplexTransferListener;
public Maven maven;
@Override
diff --git a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/MavenInvoker.java b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/MavenInvoker.java
index 426e30d8ec..e6372ccfd8 100644
--- a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/MavenInvoker.java
+++ b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/MavenInvoker.java
@@ -360,12 +360,15 @@ protected TransferListener determineTransferListener(MavenContext context, boole
if (quiet || noTransferProgress || quietCI) {
delegate = new QuietMavenTransferListener();
} else if (context.interactive && !logFile) {
- SimplexTransferListener simplex = new SimplexTransferListener(new ConsoleMavenTransferListener(
- context.invokerRequest.messageBuilderFactory(),
- context.terminal.writer(),
- context.invokerRequest.effectiveVerbose()));
- context.closeables.add(simplex);
- delegate = simplex;
+ if (context.simplexTransferListener == null) {
+ SimplexTransferListener simplex = new SimplexTransferListener(new ConsoleMavenTransferListener(
+ context.invokerRequest.messageBuilderFactory(),
+ context.terminal.writer(),
+ context.invokerRequest.effectiveVerbose()));
+ context.closeables.add(simplex);
+ context.simplexTransferListener = simplex;
+ }
+ delegate = context.simplexTransferListener;
} else {
delegate = new Slf4jMavenTransferListener();
}
diff --git a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/resident/ResidentMavenInvoker.java b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/resident/ResidentMavenInvoker.java
index 34d2a69323..dfe857e244 100644
--- a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/resident/ResidentMavenInvoker.java
+++ b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/resident/ResidentMavenInvoker.java
@@ -86,6 +86,7 @@ protected MavenContext copyIfDifferent(MavenContext mavenContext, InvokerRequest
shadow.containerCapsule = mavenContext.containerCapsule;
shadow.lookup = mavenContext.lookup;
shadow.eventSpyDispatcher = mavenContext.eventSpyDispatcher;
+ shadow.simplexTransferListener = mavenContext.simplexTransferListener;
shadow.maven = mavenContext.maven;
return shadow;
diff --git a/impl/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java b/impl/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java
index 8f8f1d902a..adcfbc3242 100644
--- a/impl/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java
+++ b/impl/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java
@@ -130,11 +130,15 @@ private String path(Artifact artifact) {
private String path(Metadata metadata) {
StringBuilder path = new StringBuilder(128);
- path.append(metadata.getGroupId().replace('.', '/')).append('/');
+ if (!metadata.getGroupId().isBlank()) {
+ path.append(metadata.getGroupId().replace('.', '/')).append('/');
+ }
- path.append(metadata.getArtifactId()).append('/');
+ if (!metadata.getArtifactId().isBlank()) {
+ path.append(metadata.getArtifactId()).append('/');
+ }
- path.append("maven-metadata.xml");
+ path.append(metadata.getType());
return path.toString();
}
diff --git a/impl/maven-executor/src/main/java/org/apache/maven/cling/executor/internal/ToolboxTool.java b/impl/maven-executor/src/main/java/org/apache/maven/cling/executor/internal/ToolboxTool.java
index 1aaa548018..5d856655bf 100644
--- a/impl/maven-executor/src/main/java/org/apache/maven/cling/executor/internal/ToolboxTool.java
+++ b/impl/maven-executor/src/main/java/org/apache/maven/cling/executor/internal/ToolboxTool.java
@@ -40,12 +40,28 @@
* @see <a href="https://github.com/maveniverse/toolbox">Maveniverse Toolbox</a>
*/
public class ToolboxTool implements ExecutorTool {
- private static final String TOOLBOX = "eu.maveniverse.maven.plugins:toolbox:0.7.4:";
+ private static final String TOOLBOX_PREFIX = "eu.maveniverse.maven.plugins:toolbox:";
private final ExecutorHelper helper;
+ private final String toolboxVersion;
+ private final ExecutorHelper.Mode forceMode;
+ /**
+ * @deprecated Better specify required version yourself. This one is "cemented" to 0.7.4
+ */
+ @Deprecated
public ToolboxTool(ExecutorHelper helper) {
+ this(helper, "0.7.4");
+ }
+
+ public ToolboxTool(ExecutorHelper helper, String toolboxVersion) {
+ this(helper, toolboxVersion, null);
+ }
+
+ public ToolboxTool(ExecutorHelper helper, String toolboxVersion, ExecutorHelper.Mode forceMode) {
this.helper = requireNonNull(helper);
+ this.toolboxVersion = requireNonNull(toolboxVersion);
+ this.forceMode = forceMode; // nullable
}
@Override
@@ -119,12 +135,14 @@ private ExecutorRequest.Builder mojo(ExecutorRequest.Builder builder, String moj
if (helper.mavenVersion().startsWith("4.")) {
builder.argument("--raw-streams");
}
- return builder.argument(TOOLBOX + mojo).argument("--quiet").argument("-DforceStdout");
+ return builder.argument(TOOLBOX_PREFIX + toolboxVersion + ":" + mojo)
+ .argument("--quiet")
+ .argument("-DforceStdout");
}
private void doExecute(ExecutorRequest.Builder builder) {
ExecutorRequest request = builder.build();
- int ec = helper.execute(request);
+ int ec = forceMode == null ? helper.execute(request) : helper.execute(forceMode, request);
if (ec != 0) {
throw new ExecutorException("Unexpected exit code=" + ec + "; stdout="
+ request.stdOut().orElse(null) + "; stderr="
diff --git a/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/impl/ToolboxToolTest.java b/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/impl/ToolboxToolTest.java
index 3f5bd0fc15..7787f0ca4b 100644
--- a/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/impl/ToolboxToolTest.java
+++ b/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/impl/ToolboxToolTest.java
@@ -43,6 +43,8 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
public class ToolboxToolTest {
+ private static final String VERSION = "0.7.4";
+
@TempDir
private static Path userHome;
@@ -69,7 +71,7 @@ void dump3(ExecutorHelper.Mode mode) throws Exception {
userHome,
MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
- Map<String, String> dump = new ToolboxTool(helper).dump(getExecutorRequest(helper));
+ Map<String, String> dump = new ToolboxTool(helper, VERSION).dump(getExecutorRequest(helper));
assertEquals(System.getProperty("maven3version"), dump.get("maven.version"));
}
@@ -83,7 +85,7 @@ void dump4(ExecutorHelper.Mode mode) throws Exception {
userHome,
MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
- Map<String, String> dump = new ToolboxTool(helper).dump(getExecutorRequest(helper));
+ Map<String, String> dump = new ToolboxTool(helper, VERSION).dump(getExecutorRequest(helper));
assertEquals(System.getProperty("maven4version"), dump.get("maven.version"));
}
@@ -123,7 +125,7 @@ void localRepository3(ExecutorHelper.Mode mode) {
userHome,
MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
- String localRepository = new ToolboxTool(helper).localRepository(getExecutorRequest(helper));
+ String localRepository = new ToolboxTool(helper, VERSION).localRepository(getExecutorRequest(helper));
Path local = Paths.get(localRepository);
assertTrue(Files.isDirectory(local));
}
@@ -139,7 +141,7 @@ void localRepository4(ExecutorHelper.Mode mode) {
userHome,
MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
- String localRepository = new ToolboxTool(helper).localRepository(getExecutorRequest(helper));
+ String localRepository = new ToolboxTool(helper, VERSION).localRepository(getExecutorRequest(helper));
Path local = Paths.get(localRepository);
assertTrue(Files.isDirectory(local));
}
@@ -154,7 +156,7 @@ void artifactPath3(ExecutorHelper.Mode mode) {
userHome,
MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
- String path = new ToolboxTool(helper)
+ String path = new ToolboxTool(helper, VERSION)
.artifactPath(getExecutorRequest(helper), "aopalliance:aopalliance:1.0", "central");
// split repository: assert "ends with" as split may introduce prefixes
assertTrue(
@@ -173,7 +175,7 @@ void artifactPath4(ExecutorHelper.Mode mode) {
userHome,
MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
- String path = new ToolboxTool(helper)
+ String path = new ToolboxTool(helper, VERSION)
.artifactPath(getExecutorRequest(helper), "aopalliance:aopalliance:1.0", "central");
// split repository: assert "ends with" as split may introduce prefixes
assertTrue(
@@ -192,7 +194,8 @@ void metadataPath3(ExecutorHelper.Mode mode) {
userHome,
MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
- String path = new ToolboxTool(helper).metadataPath(getExecutorRequest(helper), "aopalliance", "someremote");
+ String path =
+ new ToolboxTool(helper, VERSION).metadataPath(getExecutorRequest(helper), "aopalliance", "someremote");
// split repository: assert "ends with" as split may introduce prefixes
assertTrue(path.endsWith("aopalliance" + File.separator + "maven-metadata-someremote.xml"), "path=" + path);
}
@@ -207,7 +210,8 @@ void metadataPath4(ExecutorHelper.Mode mode) {
userHome,
MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
- String path = new ToolboxTool(helper).metadataPath(getExecutorRequest(helper), "aopalliance", "someremote");
+ String path =
+ new ToolboxTool(helper, VERSION).metadataPath(getExecutorRequest(helper), "aopalliance", "someremote");
// split repository: assert "ends with" as split may introduce prefixes
assertTrue(path.endsWith("aopalliance" + File.separator + "maven-metadata-someremote.xml"), "path=" + path);
}
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 7089b9fb66..36197566df 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
@@ -258,8 +258,11 @@ static GroupIdRemoteRepositoryFilterSource newGroupIdRemoteRepositoryFilterSourc
@Provides
@Named(PrefixesRemoteRepositoryFilterSource.NAME)
static PrefixesRemoteRepositoryFilterSource newPrefixesRemoteRepositoryFilterSource(
+ MetadataResolver metadataResolver,
+ RemoteRepositoryManager remoteRepositoryManager,
RepositoryLayoutProvider repositoryLayoutProvider) {
- return new PrefixesRemoteRepositoryFilterSource(repositoryLayoutProvider);
+ return new PrefixesRemoteRepositoryFilterSource(
+ () -> metadataResolver, () -> remoteRepositoryManager, repositoryLayoutProvider);
}
@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 18a48a4b47..0ba6036253 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
@@ -544,7 +544,8 @@ protected Map<String, RemoteRepositoryFilterSource> createRemoteRepositoryFilter
new GroupIdRemoteRepositoryFilterSource(getRepositorySystemLifecycle()));
result.put(
PrefixesRemoteRepositoryFilterSource.NAME,
- new PrefixesRemoteRepositoryFilterSource(getRepositoryLayoutProvider()));
+ new PrefixesRemoteRepositoryFilterSource(
+ this::getMetadataResolver, this::getRemoteRepositoryManager, getRepositoryLayoutProvider()));
return result;
}
diff --git a/its/core-it-suite/pom.xml b/its/core-it-suite/pom.xml
index 6a3e42fa3e..c7a0bf41b2 100644
--- a/its/core-it-suite/pom.xml
+++ b/its/core-it-suite/pom.xml
@@ -80,6 +80,7 @@ under the License.
<jetty9Version>9.4.57.v20241219</jetty9Version>
<stubPluginVersion>0.1-stub-SNAPSHOT</stubPluginVersion>
+ <version.toolbox>0.7.4</version.toolbox>
</properties>
<dependencies>
@@ -519,6 +520,7 @@ under the License.
<useSystemClassLoader>false</useSystemClassLoader>
<promoteUserPropertiesToSystemProperties>false</promoteUserPropertiesToSystemProperties>
<systemPropertyVariables>
+ <version.toolbox>${version.toolbox}</version.toolbox>
<maven.test.user.home>${preparedUserHome}</maven.test.user.home>
<maven.test.repo.local>${settings.localRepository}</maven.test.repo.local>
<maven.test.tmpdir>${project.build.testOutputDirectory}</maven.test.tmpdir>
diff --git a/its/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/Verifier.java b/its/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/Verifier.java
index 7f6d1794ed..b25b328d67 100644
--- a/its/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/Verifier.java
+++ b/its/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/Verifier.java
@@ -155,7 +155,7 @@ public Verifier(String basedir, List<String> defaultCliArguments) throws Verific
this.userHomeDirectory,
EMBEDDED_MAVEN_EXECUTOR,
FORKED_MAVEN_EXECUTOR);
- this.executorTool = new ToolboxTool(executorHelper);
+ this.executorTool = new ToolboxTool(executorHelper, System.getProperty("version.toolbox", "0.7.4"));
this.defaultCliArguments =
new ArrayList<>(defaultCliArguments != null ? defaultCliArguments : DEFAULT_CLI_ARGUMENTS);
this.logFile = this.basedir.resolve(logFileName);
diff --git a/pom.xml b/pom.xml
index 6ed11e5b29..5a4e7d006c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -163,7 +163,7 @@ under the License.
<plexusInterpolationVersion>1.28</plexusInterpolationVersion>
<plexusTestingVersion>1.5.0</plexusTestingVersion>
<plexusXmlVersion>4.1.0</plexusXmlVersion>
- <resolverVersion>2.0.9</resolverVersion>
+ <resolverVersion>2.0.11</resolverVersion>
<securityDispatcherVersion>4.1.0</securityDispatcherVersion>
<sisuVersion>0.9.0.M4</sisuVersion>
<slf4jVersion>2.0.17</slf4jVersion>
--
2.51.0