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/16 11:31:32 UTC

(maven) branch maven-4.0.x updated: Upgrade Mimir (#11274) (#11282)

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 1917d71075 Upgrade Mimir (#11274) (#11282)
1917d71075 is described below

commit 1917d71075c1846504a477681d534a32b0fd28c5
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Thu Oct 16 13:31:26 2025 +0200

    Upgrade Mimir (#11274) (#11282)
    
    And collect more information, and we seems loose some information in case of IT failures.
    
    Changes:
    * upgrade to Mimir 0.10.0
    * GH action collects IT failsafe outputs as well (as I sus we have something on stdout or stderr)
    * centrally manage Toolbox and Mimir versions
    * make Maven 3 tests use Mimir as well (by doing UW or PW setup for it); so far those did not use Mimir, but went directly to Central instead
    * in maven-executor and maven-cli test disable prefix RRF (for now)
    
    Backport of 58dea987b9eeef7dce04cd705293cfd23015bfdb
    Backport of e92746c474a53a23b5e65e6b3444905f741c30ed
---
 .github/workflows/maven.yml                        |  8 +++-
 .../org/apache/maven/api/cli/InvokerException.java |  2 +-
 .../maven/cling/invoker/mvn/Environment.java       | 27 +++++++++++++
 .../maven/cling/invoker/mvn/MavenInvokerTest.java  | 21 +++++------
 .../cling/invoker/mvn/MavenInvokerTestSupport.java |  9 ++++-
 .../mvn/resident/ResidentMavenInvokerTest.java     |  2 +-
 .../apache/maven/cling/executor/Environment.java   | 27 +++++++++++++
 .../cling/executor/MavenExecutorTestSupport.java   | 33 ++++++++++------
 .../maven/cling/executor/impl/ToolboxToolTest.java | 44 ++++++++++++++--------
 pom.xml                                            |  4 +-
 10 files changed, 133 insertions(+), 44 deletions(-)

diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index c30c639ebf..a0e1540072 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -32,7 +32,7 @@ concurrency:
 permissions: {}
 
 env:
-  MIMIR_VERSION: 0.9.4
+  MIMIR_VERSION: 0.10.0
   MIMIR_BASEDIR: ~/.mimir
   MIMIR_LOCAL: ~/.mimir/local
 
@@ -282,4 +282,8 @@ jobs:
         if: failure() || cancelled()
         with:
           name: ${{ github.run_number }}-integration-test-artifact-${{ runner.os }}-${{ matrix.java }}
-          path: ./its/core-it-suite/target/test-classes/
+          path: |
+            **/target/surefire-reports/*
+            **/target/failsafe-reports/*
+            ./its/core-it-suite/target/test-classes/**
+            **/target/java_heapdump.hprof
diff --git a/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/InvokerException.java b/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/InvokerException.java
index d1a479b711..4fbc41c0e0 100644
--- a/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/InvokerException.java
+++ b/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/InvokerException.java
@@ -58,7 +58,7 @@ public static final class ExitException extends InvokerException {
         private final int exitCode;
 
         public ExitException(int exitCode) {
-            super("EXIT");
+            super("EXIT=" + exitCode);
             this.exitCode = exitCode;
         }
 
diff --git a/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/Environment.java b/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/Environment.java
new file mode 100644
index 0000000000..b004cf2d97
--- /dev/null
+++ b/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/Environment.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.cling.invoker.mvn;
+
+public final class Environment {
+    private Environment() {}
+
+    public static final String TOOLBOX_VERSION = System.getProperty("version.toolbox", "UNSET version.toolbox");
+
+    public static final String MIMIR_VERSION = System.getProperty("version.mimir", "UNSET version.mimir");
+}
diff --git a/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/MavenInvokerTest.java b/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/MavenInvokerTest.java
index 539cf8331d..f169d3007b 100644
--- a/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/MavenInvokerTest.java
+++ b/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/MavenInvokerTest.java
@@ -66,6 +66,14 @@ void defaultFs(
         invoke(cwd, userHome, List.of("verify"), List.of());
     }
 
+    @Disabled("Enable it when fully moved to NIO2 with Path/Filesystem (ie MavenExecutionRequest)")
+    @Test
+    void jimFs() throws Exception {
+        try (FileSystem fs = Jimfs.newFileSystem(Configuration.unix())) {
+            invoke(fs.getPath("/cwd"), fs.getPath("/home"), List.of("verify"), List.of());
+        }
+    }
+
     /**
      * Same source (user or project extensions.xml) must not contain same GA with different V.
      */
@@ -214,20 +222,11 @@ void conflictingSettings(
         Map<String, String> logs = invoke(
                 cwd,
                 userHome,
-                List.of("eu.maveniverse.maven.plugins:toolbox:" + System.getProperty("version.toolbox") + ":help"),
+                List.of("eu.maveniverse.maven.plugins:toolbox:" + Environment.TOOLBOX_VERSION + ":help"),
                 List.of("--force-interactive"));
 
-        String log =
-                logs.get("eu.maveniverse.maven.plugins:toolbox:" + System.getProperty("version.toolbox") + ":help");
+        String log = logs.get("eu.maveniverse.maven.plugins:toolbox:" + Environment.TOOLBOX_VERSION + ":help");
         assertTrue(log.contains("https://repo1.maven.org/maven2"), log);
         assertFalse(log.contains("https://repo.maven.apache.org/maven2"), log);
     }
-
-    @Disabled("Until we move off fully from File")
-    @Test
-    void jimFs() throws Exception {
-        try (FileSystem fs = Jimfs.newFileSystem(Configuration.unix())) {
-            invoke(fs.getPath("/cwd"), fs.getPath("/home"), List.of("verify"), List.of());
-        }
-    }
 }
diff --git a/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/MavenInvokerTestSupport.java b/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/MavenInvokerTestSupport.java
index 52cde3a2b6..f299b4b748 100644
--- a/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/MavenInvokerTestSupport.java
+++ b/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/MavenInvokerTestSupport.java
@@ -30,6 +30,7 @@
 
 import eu.maveniverse.maven.mimir.testing.MimirInfuser;
 import org.apache.maven.api.cli.Invoker;
+import org.apache.maven.api.cli.InvokerException;
 import org.apache.maven.api.cli.Parser;
 import org.apache.maven.api.cli.ParserRequest;
 import org.apache.maven.jline.JLineMessageBuilderFactory;
@@ -97,7 +98,9 @@ protected Map<String, String> invoke(Path cwd, Path userHome, Collection<String>
         Files.createDirectories(appJava.getParent());
         Files.writeString(appJava, APP_JAVA_STRING);
 
-        MimirInfuser.infuseUW(userHome);
+        if (MimirInfuser.isMimirPresentUW()) {
+            MimirInfuser.doInfuseUW(Environment.MIMIR_VERSION, userHome);
+        }
 
         HashMap<String, String> logs = new HashMap<>();
         Parser parser = createParser();
@@ -107,6 +110,7 @@ protected Map<String, String> invoke(Path cwd, Path userHome, Collection<String>
                 ByteArrayOutputStream stdout = new ByteArrayOutputStream();
                 ByteArrayOutputStream stderr = new ByteArrayOutputStream();
                 List<String> mvnArgs = new ArrayList<>(args);
+                mvnArgs.add("-Daether.remoteRepositoryFilter.prefixes=false");
                 mvnArgs.add(goal);
                 int exitCode = -1;
                 Exception exception = null;
@@ -119,6 +123,9 @@ protected Map<String, String> invoke(Path cwd, Path userHome, Collection<String>
                                     .stdErr(stderr)
                                     .embedded(true)
                                     .build()));
+                } catch (InvokerException.ExitException e) {
+                    exitCode = e.getExitCode();
+                    exception = e;
                 } catch (Exception e) {
                     exception = e;
                 }
diff --git a/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/resident/ResidentMavenInvokerTest.java b/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/resident/ResidentMavenInvokerTest.java
index 56b9a10558..c59ad32491 100644
--- a/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/resident/ResidentMavenInvokerTest.java
+++ b/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/resident/ResidentMavenInvokerTest.java
@@ -61,7 +61,7 @@ void defaultFs(
         invoke(cwd, userHome, List.of("verify"), List.of());
     }
 
-    @Disabled("Until we move off fully from File")
+    @Disabled("Enable it when fully moved to NIO2 with Path/Filesystem (ie MavenExecutionRequest)")
     @Test
     void jimFs() throws Exception {
         try (FileSystem fs = Jimfs.newFileSystem(Configuration.unix())) {
diff --git a/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/Environment.java b/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/Environment.java
new file mode 100644
index 0000000000..0345cfdc77
--- /dev/null
+++ b/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/Environment.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.cling.executor;
+
+public final class Environment {
+    private Environment() {}
+
+    public static final String TOOLBOX_VERSION = System.getProperty("version.toolbox", "UNSET version.toolbox");
+
+    public static final String MIMIR_VERSION = System.getProperty("version.mimir", "UNSET version.mimir");
+}
diff --git a/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/MavenExecutorTestSupport.java b/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/MavenExecutorTestSupport.java
index a055139f66..b5aecc4fc9 100644
--- a/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/MavenExecutorTestSupport.java
+++ b/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/MavenExecutorTestSupport.java
@@ -30,7 +30,6 @@
 import org.apache.maven.api.annotations.Nullable;
 import org.apache.maven.api.cli.Executor;
 import org.apache.maven.api.cli.ExecutorRequest;
-import org.apache.maven.cling.executor.impl.ToolboxToolTest;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -45,7 +44,7 @@
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.condition.OS.WINDOWS;
 
-@Timeout(15)
+@Timeout(60)
 public abstract class MavenExecutorTestSupport {
     @TempDir(cleanup = CleanupMode.NEVER)
     private static Path tempDir;
@@ -112,8 +111,7 @@ void dump3() throws Exception {
                 List.of(mvn3ExecutorRequestBuilder()
                         .cwd(cwd)
                         .userHomeDirectory(userHome)
-                        .argument(
-                                "eu.maveniverse.maven.plugins:toolbox:" + ToolboxToolTest.TOOLBOX_VERSION + ":gav-dump")
+                        .argument("eu.maveniverse.maven.plugins:toolbox:" + Environment.TOOLBOX_VERSION + ":gav-dump")
                         .argument("-l")
                         .argument(logfile)
                         .build()));
@@ -128,8 +126,7 @@ void dump4() throws Exception {
                 List.of(mvn4ExecutorRequestBuilder()
                         .cwd(cwd)
                         .userHomeDirectory(userHome)
-                        .argument(
-                                "eu.maveniverse.maven.plugins:toolbox:" + ToolboxToolTest.TOOLBOX_VERSION + ":gav-dump")
+                        .argument("eu.maveniverse.maven.plugins:toolbox:" + Environment.TOOLBOX_VERSION + ":gav-dump")
                         .argument("-l")
                         .argument(logfile)
                         .build()));
@@ -338,10 +335,13 @@ public static void main(String... args) {
 
     protected void execute(@Nullable Path logFile, Collection<ExecutorRequest> requests) throws Exception {
         Executor invoker = createAndMemoizeExecutor();
-        String mavenVersion = invoker.mavenVersion(requests.iterator().next());
         for (ExecutorRequest request : requests) {
-            if (mavenVersion.startsWith("4.")) {
-                MimirInfuser.infuseUW(request.userHomeDirectory());
+            if (MimirInfuser.isMimirPresentUW()) {
+                if (maven3Home().equals(request.installationDirectory())) {
+                    MimirInfuser.doInfusePW(Environment.MIMIR_VERSION, request.cwd(), request.userHomeDirectory());
+                } else if (maven4Home().equals(request.installationDirectory())) {
+                    MimirInfuser.doInfuseUW(Environment.MIMIR_VERSION, request.userHomeDirectory());
+                }
             }
             int exitCode = invoker.execute(request);
             if (exitCode != 0) {
@@ -355,15 +355,24 @@ protected String mavenVersion(ExecutorRequest request) throws Exception {
     }
 
     public ExecutorRequest.Builder mvn3ExecutorRequestBuilder() {
-        return customize(ExecutorRequest.mavenBuilder(Paths.get(System.getProperty("maven3home"))));
+        return customize(ExecutorRequest.mavenBuilder(maven3Home()));
+    }
+
+    private Path maven3Home() {
+        return ExecutorRequest.getCanonicalPath(Paths.get(System.getProperty("maven3home")));
     }
 
     public ExecutorRequest.Builder mvn4ExecutorRequestBuilder() {
-        return customize(ExecutorRequest.mavenBuilder(Paths.get(System.getProperty("maven4home"))));
+        return customize(ExecutorRequest.mavenBuilder(maven4Home()));
+    }
+
+    private Path maven4Home() {
+        return ExecutorRequest.getCanonicalPath(Paths.get(System.getProperty("maven4home")));
     }
 
     private ExecutorRequest.Builder customize(ExecutorRequest.Builder builder) {
-        builder = builder.cwd(cwd).userHomeDirectory(userHome);
+        builder =
+                builder.cwd(cwd).userHomeDirectory(userHome).argument("-Daether.remoteRepositoryFilter.prefixes=false");
         if (System.getProperty("localRepository") != null) {
             builder.argument("-Dmaven.repo.local.tail=" + System.getProperty("localRepository"));
         }
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 52afecb5f8..7bc6c1ea05 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
@@ -27,6 +27,7 @@
 import eu.maveniverse.maven.mimir.testing.MimirInfuser;
 import org.apache.maven.api.cli.Executor;
 import org.apache.maven.api.cli.ExecutorRequest;
+import org.apache.maven.cling.executor.Environment;
 import org.apache.maven.cling.executor.ExecutorHelper;
 import org.apache.maven.cling.executor.embedded.EmbeddedMavenExecutor;
 import org.apache.maven.cling.executor.forked.ForkedMavenExecutor;
@@ -43,29 +44,38 @@
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-@Timeout(15)
+@Timeout(60)
 public class ToolboxToolTest {
     private static final Executor EMBEDDED_MAVEN_EXECUTOR = new EmbeddedMavenExecutor();
     private static final Executor FORKED_MAVEN_EXECUTOR = new ForkedMavenExecutor();
 
-    public static final String TOOLBOX_VERSION = System.getProperty("version.toolbox");
-
     @TempDir(cleanup = CleanupMode.NEVER)
     private static Path tempDir;
 
     private Path userHome;
+    private Path cwd;
 
     @BeforeEach
     void beforeEach(TestInfo testInfo) throws Exception {
-        userHome = tempDir.resolve(testInfo.getTestMethod().orElseThrow().getName());
-        Files.createDirectories(userHome);
-        MimirInfuser.infuseUW(userHome);
+        String testName = testInfo.getTestMethod().orElseThrow().getName();
+        userHome = tempDir.resolve(testName);
+        cwd = userHome.resolve("cwd");
+        Files.createDirectories(cwd);
+
+        if (MimirInfuser.isMimirPresentUW()) {
+            if (testName.contains("3")) {
+                MimirInfuser.doInfusePW(Environment.MIMIR_VERSION, cwd, userHome);
+            } else {
+                MimirInfuser.doInfuseUW(Environment.MIMIR_VERSION, userHome);
+            }
+        }
 
         System.out.println("=== " + testInfo.getTestMethod().orElseThrow().getName());
     }
 
     private ExecutorRequest.Builder getExecutorRequest(ExecutorHelper helper) {
-        ExecutorRequest.Builder builder = helper.executorRequest();
+        ExecutorRequest.Builder builder =
+                helper.executorRequest().cwd(cwd).argument("-Daether.remoteRepositoryFilter.prefixes=false");
         if (System.getProperty("localRepository") != null) {
             builder.argument("-Dmaven.repo.local.tail=" + System.getProperty("localRepository"));
         }
@@ -77,7 +87,8 @@ private ExecutorRequest.Builder getExecutorRequest(ExecutorHelper helper) {
     void dump3(ExecutorHelper.Mode mode) throws Exception {
         ExecutorHelper helper =
                 new HelperImpl(mode, mvn3Home(), userHome, EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
-        Map<String, String> dump = new ToolboxTool(helper, TOOLBOX_VERSION).dump(getExecutorRequest(helper));
+        Map<String, String> dump =
+                new ToolboxTool(helper, Environment.TOOLBOX_VERSION).dump(getExecutorRequest(helper));
         System.out.println(mode.name() + ": " + dump.toString());
         assertEquals(System.getProperty("maven3version"), dump.get("maven.version"));
     }
@@ -87,7 +98,8 @@ void dump3(ExecutorHelper.Mode mode) throws Exception {
     void dump4(ExecutorHelper.Mode mode) throws Exception {
         ExecutorHelper helper =
                 new HelperImpl(mode, mvn4Home(), userHome, EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
-        Map<String, String> dump = new ToolboxTool(helper, TOOLBOX_VERSION).dump(getExecutorRequest(helper));
+        Map<String, String> dump =
+                new ToolboxTool(helper, Environment.TOOLBOX_VERSION).dump(getExecutorRequest(helper));
         System.out.println(mode.name() + ": " + dump.toString());
         assertEquals(System.getProperty("maven4version"), dump.get("maven.version"));
     }
@@ -115,7 +127,8 @@ void version4(ExecutorHelper.Mode mode) {
     void localRepository3(ExecutorHelper.Mode mode) {
         ExecutorHelper helper =
                 new HelperImpl(mode, mvn3Home(), userHome, EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
-        String localRepository = new ToolboxTool(helper, TOOLBOX_VERSION).localRepository(getExecutorRequest(helper));
+        String localRepository =
+                new ToolboxTool(helper, Environment.TOOLBOX_VERSION).localRepository(getExecutorRequest(helper));
         System.out.println(mode.name() + ": " + localRepository);
         Path local = Paths.get(localRepository);
         assertTrue(Files.isDirectory(local));
@@ -126,7 +139,8 @@ void localRepository3(ExecutorHelper.Mode mode) {
     void localRepository4(ExecutorHelper.Mode mode) {
         ExecutorHelper helper =
                 new HelperImpl(mode, mvn4Home(), userHome, EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
-        String localRepository = new ToolboxTool(helper, TOOLBOX_VERSION).localRepository(getExecutorRequest(helper));
+        String localRepository =
+                new ToolboxTool(helper, Environment.TOOLBOX_VERSION).localRepository(getExecutorRequest(helper));
         System.out.println(mode.name() + ": " + localRepository);
         Path local = Paths.get(localRepository);
         assertTrue(Files.isDirectory(local));
@@ -137,7 +151,7 @@ void localRepository4(ExecutorHelper.Mode mode) {
     void artifactPath3(ExecutorHelper.Mode mode) {
         ExecutorHelper helper =
                 new HelperImpl(mode, mvn3Home(), userHome, EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
-        String path = new ToolboxTool(helper, TOOLBOX_VERSION)
+        String path = new ToolboxTool(helper, Environment.TOOLBOX_VERSION)
                 .artifactPath(getExecutorRequest(helper), "aopalliance:aopalliance:1.0", "central");
         System.out.println(mode.name() + ": " + path);
         // split repository: assert "ends with" as split may introduce prefixes
@@ -152,7 +166,7 @@ void artifactPath3(ExecutorHelper.Mode mode) {
     void artifactPath4(ExecutorHelper.Mode mode) {
         ExecutorHelper helper =
                 new HelperImpl(mode, mvn4Home(), userHome, EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
-        String path = new ToolboxTool(helper, TOOLBOX_VERSION)
+        String path = new ToolboxTool(helper, Environment.TOOLBOX_VERSION)
                 .artifactPath(getExecutorRequest(helper), "aopalliance:aopalliance:1.0", "central");
         System.out.println(mode.name() + ": " + path);
         // split repository: assert "ends with" as split may introduce prefixes
@@ -167,7 +181,7 @@ void artifactPath4(ExecutorHelper.Mode mode) {
     void metadataPath3(ExecutorHelper.Mode mode) {
         ExecutorHelper helper =
                 new HelperImpl(mode, mvn4Home(), userHome, EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
-        String path = new ToolboxTool(helper, TOOLBOX_VERSION)
+        String path = new ToolboxTool(helper, Environment.TOOLBOX_VERSION)
                 .metadataPath(getExecutorRequest(helper), "aopalliance", "someremote");
         System.out.println(mode.name() + ": " + path);
         // split repository: assert "ends with" as split may introduce prefixes
@@ -179,7 +193,7 @@ void metadataPath3(ExecutorHelper.Mode mode) {
     void metadataPath4(ExecutorHelper.Mode mode) {
         ExecutorHelper helper =
                 new HelperImpl(mode, mvn4Home(), userHome, EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
-        String path = new ToolboxTool(helper, TOOLBOX_VERSION)
+        String path = new ToolboxTool(helper, Environment.TOOLBOX_VERSION)
                 .metadataPath(getExecutorRequest(helper), "aopalliance", "someremote");
         System.out.println(mode.name() + ": " + path);
         // split repository: assert "ends with" as split may introduce prefixes
diff --git a/pom.xml b/pom.xml
index 10312e3f03..d98cc26628 100644
--- a/pom.xml
+++ b/pom.xml
@@ -693,7 +693,7 @@ under the License.
       <dependency>
         <groupId>eu.maveniverse.maven.mimir</groupId>
         <artifactId>testing</artifactId>
-        <version>0.9.4</version>
+        <version>0.10.0</version>
       </dependency>
     </dependencies>
     <!--bootstrap-start-comment-->
@@ -725,6 +725,7 @@ under the License.
             <argLine>-Xmx256m @{jacocoArgLine}</argLine>
             <systemPropertyVariables combine.children="append">
               <version.toolbox>${toolboxVersion}</version.toolbox>
+              <version.mimir>${env.MIMIR_VERSION}</version.mimir>
             </systemPropertyVariables>
           </configuration>
         </plugin>
@@ -736,6 +737,7 @@ under the License.
             <argLine>-Xmx256m @{jacocoArgLine}</argLine>
             <systemPropertyVariables combine.children="append">
               <version.toolbox>${toolboxVersion}</version.toolbox>
+              <version.mimir>${env.MIMIR_VERSION}</version.mimir>
             </systemPropertyVariables>
           </configuration>
         </plugin>