You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sl...@apache.org on 2026/09/28 19:17:00 UTC

(maven-surefire) 01/04: Migrate surefire-its fixture from maven-verifier to maven-executor

This is an automated email from the ASF dual-hosted git repository.

slachiewicz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit 4ade63e1eb17de06bb7d2f8c20f443277d8bd24b
Author: Sylwester Lachiewicz <sl...@apache.org>
AuthorDate: Mon Sep 21 12:46:43 2026 +0200

    Migrate surefire-its fixture from maven-verifier to maven-executor
    
    maven-verifier is deprecated (apache/maven-verifier#186)
    Embedded mode now works on Maven 4, so the forced fork in MavenLauncher is not needed
---
 .github/copilot-instructions.md                    |   2 +-
 pom.xml                                            |   6 +-
 surefire-its/pom.xml                               |   4 +-
 .../JUnit447RerunFailingTestWithCucumberIT.java    |   2 +-
 .../surefire/its/JUnit4FailingAfterClassIT.java    |   2 +-
 .../surefire/its/JUnit4PlatformEnginesIT.java      |   2 +-
 .../its/JUnit4PlatformStreamCorruptionIT.java      |   2 +-
 .../surefire/its/JUnit5FailingAfterAllIT.java      |   2 +-
 .../surefire/its/MultiModuleProjectWithJPMSIT.java |   2 +-
 .../org/apache/maven/surefire/its/RunOrderIT.java  |   2 +-
 .../apache/maven/surefire/its/Surefire1602IT.java  |   2 +-
 .../surefire/its/Surefire2239TestNgRerunIT.java    |   2 +-
 .../its/Surefire2241JUnitParamsRerunIT.java        |   2 +-
 .../its/Surefire2260NonUniqueScenariosIT.java      |   2 +-
 .../maven/surefire/its/WorkingDirectoryIT.java     |   2 +-
 .../its/fixture/FailsafeOutputValidator.java       |   2 -
 .../maven/surefire/its/fixture/MavenLauncher.java  |   3 -
 .../surefire/its/fixture/OutputValidator.java      |   4 +-
 .../surefire/its/fixture/ResourceExtractor.java    | 117 ++++++++
 .../surefire/its/fixture/SurefireLauncher.java     |   2 -
 ...utValidator.java => VerificationException.java} |  30 +-
 .../maven/surefire/its/fixture/Verifier.java       | 329 +++++++++++++++++++++
 .../Surefire1082ParallelJUnit4ParameterizedIT.java |   2 +-
 .../its/jiras/Surefire1185DoNotSpawnTestsIT.java   |   2 +-
 .../its/jiras/Surefire1209RerunAndForkCountIT.java |   2 +-
 .../Surefire1383ScanSessionDependenciesIT.java     |   2 +-
 .../jiras/Surefire1993JpmsProvidingModulesIT.java  |   2 +-
 .../jiras/Surefire2006ShadefireTransformersIT.java |   2 +-
 .../maven/surefire/its/jiras/Surefire2065IT.java   |   2 +-
 ...re2095FailsafeJvmCrashShouldNotBeIgnoredIT.java |   2 +-
 .../Surefire649EmptyStringSystemPropertiesIT.java  |   2 +-
 ...fire735ForkFailWithRedirectConsoleOutputIT.java |   2 +-
 .../its/jiras/Surefire772NoFailsafeReportsIT.java  |   2 +-
 .../jiras/Surefire995CategoryInheritanceIT.java    |   2 +-
 ...refireJUnit4MethodParallelWithSuiteCountIT.java |   2 +-
 35 files changed, 493 insertions(+), 56 deletions(-)

diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
index 6deb46ec5..e2f1e7f4d 100644
--- a/.github/copilot-instructions.md
+++ b/.github/copilot-instructions.md
@@ -84,7 +84,7 @@ All test frameworks execute through the unified JUnit Platform provider (`surefi
 
 ### Integration Tests
 
-`surefire-its` contains integration tests that launch real Maven builds against fixture projects in `surefire-its/src/test/resources/`. Requires `-Prun-its`. Uses `maven-verifier` to invoke Maven and assert on build output.
+`surefire-its` contains integration tests that launch real Maven builds against fixture projects in `surefire-its/src/test/resources/`. Requires `-Prun-its`. Uses `maven-executor` (via the `fixture.Verifier` wrapper) to invoke Maven and assert on build output.
 
 ## Key Conventions
 
diff --git a/pom.xml b/pom.xml
index a367c6f32..69327cce3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -218,9 +218,9 @@
         <version>2.4.3</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.maven.shared</groupId>
-        <artifactId>maven-verifier</artifactId>
-        <version>2.0.0-M1</version>
+        <groupId>org.apache.maven.executor</groupId>
+        <artifactId>maven-executor</artifactId>
+        <version>1.0.0</version>
       </dependency>
       <dependency>
         <groupId>org.codehaus.plexus</groupId>
diff --git a/surefire-its/pom.xml b/surefire-its/pom.xml
index 4fa335f4a..e1d04f8cc 100644
--- a/surefire-its/pom.xml
+++ b/surefire-its/pom.xml
@@ -70,8 +70,8 @@
       <scope>runtime</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.maven.shared</groupId>
-      <artifactId>maven-verifier</artifactId>
+      <groupId>org.apache.maven.executor</groupId>
+      <artifactId>maven-executor</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit447RerunFailingTestWithCucumberIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit447RerunFailingTestWithCucumberIT.java
index cf697d2c0..d7daf9d04 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit447RerunFailingTestWithCucumberIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit447RerunFailingTestWithCucumberIT.java
@@ -20,9 +20,9 @@
 
 import java.util.ArrayList;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
 import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
 
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit4FailingAfterClassIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit4FailingAfterClassIT.java
index 77b25fb7a..60633bedf 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit4FailingAfterClassIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit4FailingAfterClassIT.java
@@ -18,9 +18,9 @@
  */
 package org.apache.maven.surefire.its;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.Matchers.containsString;
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit4PlatformEnginesIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit4PlatformEnginesIT.java
index 8b81f9cc8..fcd8fc934 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit4PlatformEnginesIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit4PlatformEnginesIT.java
@@ -21,9 +21,9 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
 
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit4PlatformStreamCorruptionIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit4PlatformStreamCorruptionIT.java
index 82739f6da..e54b009df 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit4PlatformStreamCorruptionIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit4PlatformStreamCorruptionIT.java
@@ -20,9 +20,9 @@
 
 import java.util.List;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit5FailingAfterAllIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit5FailingAfterAllIT.java
index 75d62dd7f..1d91c43f9 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit5FailingAfterAllIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnit5FailingAfterAllIT.java
@@ -18,9 +18,9 @@
  */
 package org.apache.maven.surefire.its;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.Matchers.containsString;
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/MultiModuleProjectWithJPMSIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/MultiModuleProjectWithJPMSIT.java
index 41132a17e..f230fac91 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/MultiModuleProjectWithJPMSIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/MultiModuleProjectWithJPMSIT.java
@@ -20,9 +20,9 @@
 
 import java.util.List;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.AbstractJava9PlusIT;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/RunOrderIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/RunOrderIT.java
index 444687fbe..dc62a4693 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/RunOrderIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/RunOrderIT.java
@@ -20,10 +20,10 @@
 
 import java.util.Arrays;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
 import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 import static org.apache.maven.surefire.its.fixture.HelperAssertions.assumeJavaVersion;
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/Surefire1602IT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/Surefire1602IT.java
index 8b2cce597..6b40e42d9 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/Surefire1602IT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/Surefire1602IT.java
@@ -18,9 +18,9 @@
  */
 package org.apache.maven.surefire.its;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
 import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/Surefire2239TestNgRerunIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/Surefire2239TestNgRerunIT.java
index d797e2603..c69348c2a 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/Surefire2239TestNgRerunIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/Surefire2239TestNgRerunIT.java
@@ -18,9 +18,9 @@
  */
 package org.apache.maven.surefire.its;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.Matchers.containsString;
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/Surefire2241JUnitParamsRerunIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/Surefire2241JUnitParamsRerunIT.java
index 20a119b7b..d650355e7 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/Surefire2241JUnitParamsRerunIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/Surefire2241JUnitParamsRerunIT.java
@@ -18,9 +18,9 @@
  */
 package org.apache.maven.surefire.its;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/Surefire2260NonUniqueScenariosIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/Surefire2260NonUniqueScenariosIT.java
index 6dd622c61..8e93278ac 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/Surefire2260NonUniqueScenariosIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/Surefire2260NonUniqueScenariosIT.java
@@ -18,9 +18,9 @@
  */
 package org.apache.maven.surefire.its;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/WorkingDirectoryIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/WorkingDirectoryIT.java
index fffca2e3a..8b594bfb2 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/WorkingDirectoryIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/WorkingDirectoryIT.java
@@ -23,11 +23,11 @@
 import java.io.IOException;
 import java.util.Properties;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
 import org.apache.maven.surefire.its.fixture.SurefireLauncher;
 import org.apache.maven.surefire.its.fixture.TestFile;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/FailsafeOutputValidator.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/FailsafeOutputValidator.java
index 3446a54cf..36c10a08b 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/FailsafeOutputValidator.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/FailsafeOutputValidator.java
@@ -18,8 +18,6 @@
  */
 package org.apache.maven.surefire.its.fixture;
 
-import org.apache.maven.shared.verifier.VerificationException;
-
 /**
  *
  */
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/MavenLauncher.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/MavenLauncher.java
index 463d8b46e..81b506dac 100755
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/MavenLauncher.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/MavenLauncher.java
@@ -29,9 +29,6 @@
 import java.util.Properties;
 
 import org.apache.maven.shared.utils.io.FileUtils;
-import org.apache.maven.shared.verifier.VerificationException;
-import org.apache.maven.shared.verifier.Verifier;
-import org.apache.maven.shared.verifier.util.ResourceExtractor;
 
 import static java.util.Collections.singletonMap;
 import static java.util.Collections.unmodifiableList;
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/OutputValidator.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/OutputValidator.java
index 96ab98101..21a67e99c 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/OutputValidator.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/OutputValidator.java
@@ -26,12 +26,10 @@
 import java.util.List;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.maven.shared.verifier.VerificationException;
-import org.apache.maven.shared.verifier.Verifier;
 import org.hamcrest.Matcher;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.apache.maven.shared.verifier.Verifier.stripAnsi;
+import static org.apache.maven.surefire.its.fixture.Verifier.stripAnsi;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/ResourceExtractor.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/ResourceExtractor.java
new file mode 100644
index 000000000..4f7692893
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/ResourceExtractor.java
@@ -0,0 +1,117 @@
+/*
+ * 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.surefire.its.fixture;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.maven.shared.utils.io.FileUtils;
+
+/**
+ * Extracts a classpath resource (an IT project directory) to a destination directory on disk, so
+ * {@code mvn} can be run against it. Ported from the (now removed) {@code
+ * org.apache.maven.shared.verifier.util.ResourceExtractor} that shipped in the deprecated maven-verifier
+ * artifact; only the single entry point that {@code MavenLauncher} needs is kept.
+ */
+final class ResourceExtractor {
+    private ResourceExtractor() {}
+
+    static File extractResourceToDestination(Class<?> cl, String resourcePath, File destination, boolean alwaysExtract)
+            throws IOException {
+        URL url = cl.getResource(resourcePath);
+        if (url == null) {
+            throw new IllegalArgumentException("Resource not found: " + resourcePath);
+        }
+        if ("jar".equalsIgnoreCase(url.getProtocol())) {
+            File jarFile = getJarFileFromUrl(url);
+            extractResourcePathFromJar(cl, jarFile, resourcePath, destination);
+        } else {
+            try {
+                File resourceFile = new File(new URI(url.toExternalForm()));
+                if (!alwaysExtract) {
+                    return resourceFile;
+                }
+                if (resourceFile.isDirectory()) {
+                    FileUtils.copyDirectoryStructure(resourceFile, destination);
+                } else {
+                    FileUtils.copyFile(resourceFile, destination);
+                }
+            } catch (URISyntaxException e) {
+                throw new RuntimeException("Couldn't convert URL to File:" + url, e);
+            }
+        }
+        return destination;
+    }
+
+    private static void extractResourcePathFromJar(Class<?> cl, File jarFile, String resourcePath, File dest)
+            throws IOException {
+        try (ZipFile z = new ZipFile(jarFile, ZipFile.OPEN_READ)) {
+            String zipStyleResourcePath = resourcePath.substring(1) + "/";
+            ZipEntry ze = z.getEntry(zipStyleResourcePath);
+            if (ze != null) {
+                // If it's a directory, then we need to look at all the entries
+                for (Enumeration<? extends ZipEntry> entries = z.entries(); entries.hasMoreElements(); ) {
+                    ze = entries.nextElement();
+                    if (ze.getName().startsWith(zipStyleResourcePath)) {
+                        String relativePath = ze.getName().substring(zipStyleResourcePath.length());
+                        File destFile = new File(dest, relativePath);
+                        if (ze.isDirectory()) {
+                            //noinspection ResultOfMethodCallIgnored
+                            destFile.mkdirs();
+                        } else {
+                            try (OutputStream fos = new FileOutputStream(destFile)) {
+                                IOUtils.copy(z.getInputStream(ze), fos);
+                            }
+                        }
+                    }
+                }
+            } else {
+                try (OutputStream fos = new FileOutputStream(dest)) {
+                    IOUtils.copy(cl.getResourceAsStream(resourcePath), fos);
+                }
+            }
+        }
+    }
+
+    private static File getJarFileFromUrl(URL url) {
+        if (!"jar".equalsIgnoreCase(url.getProtocol())) {
+            throw new IllegalArgumentException("This is not a Jar URL:" + url);
+        }
+        String resourceFilePath = url.getFile();
+        int index = resourceFilePath.indexOf('!');
+        if (index == -1) {
+            throw new IllegalStateException("Bug! " + url.toExternalForm() + " does not have a '!'");
+        }
+        String jarFileURI = resourceFilePath.substring(0, index);
+        try {
+            return new File(new URI(jarFileURI));
+        } catch (URISyntaxException e) {
+            throw new IllegalStateException("Bug! URI failed to parse: " + jarFileURI, e);
+        }
+    }
+}
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java
index 3874d1cd8..a3ad0ede8 100755
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java
@@ -22,8 +22,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.maven.shared.verifier.VerificationException;
-
 /**
  * Encapsulate all needed features to start a surefire run
  * <br>
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/FailsafeOutputValidator.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/VerificationException.java
similarity index 60%
copy from surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/FailsafeOutputValidator.java
copy to surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/VerificationException.java
index 3446a54cf..36a6f113c 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/FailsafeOutputValidator.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/VerificationException.java
@@ -18,24 +18,24 @@
  */
 package org.apache.maven.surefire.its.fixture;
 
-import org.apache.maven.shared.verifier.VerificationException;
-
 /**
- *
+ * Signals a failure detected by {@link Verifier}, mirroring the checked exception of the same
+ * name previously provided by the (deprecated) {@code org.apache.maven.shared.verifier.Verifier}.
  */
-public class FailsafeOutputValidator extends OutputValidator {
-    public FailsafeOutputValidator(OutputValidator source) {
-        super(source.verifier);
+public class VerificationException extends Exception {
+    public VerificationException() {
+        super();
+    }
+
+    public VerificationException(String message) {
+        super(message);
+    }
+
+    public VerificationException(Throwable cause) {
+        super(cause);
     }
 
-    @Override
-    public OutputValidator verifyErrorFree(int total) {
-        try {
-            verifier.verifyErrorFreeLog();
-            this.assertIntegrationTestSuiteResults(total, 0, 0, 0);
-            return this;
-        } catch (VerificationException e) {
-            throw new SurefireVerifierException(e);
-        }
+    public VerificationException(String message, Throwable cause) {
+        super(message, cause);
     }
 }
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/Verifier.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/Verifier.java
new file mode 100644
index 000000000..3688b2590
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/Verifier.java
@@ -0,0 +1,329 @@
+/*
+ * 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.surefire.its.fixture;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.maven.executor.ExecutorException;
+import org.apache.maven.executor.ExecutorHelper;
+import org.apache.maven.executor.ExecutorRequest;
+import org.apache.maven.executor.ExecutorResult;
+
+/**
+ * Minimal, purpose-built replacement for the deprecated {@code org.apache.maven.shared.verifier.Verifier}
+ * (maven-verifier 2.0.0-M1, see apache/maven-verifier#186), implementing only the subset of that API used
+ * by the surefire-its fixture, on top of {@code org.apache.maven.executor:maven-executor}.
+ *
+ * @see <a href="https://github.com/apache/maven-executor">maven-executor</a>
+ */
+public class Verifier {
+    private static final String[] DEFAULT_CLI_ARGUMENTS = {"-e", "--batch-mode"};
+
+    private static final String CLEAN_CLI_ARGUMENT = "org.apache.maven.plugins:maven-clean-plugin:clean";
+
+    private static final Path MAVEN_HOME = Paths.get(System.getProperty("maven.home"));
+
+    /**
+     * Kept alive for the lifetime of the classloader: re-creating it per invocation would mean re-creating the
+     * embedded Maven ClassWorld on every single Maven invocation, which is (comparatively) expensive.
+     */
+    private static final ExecutorHelper EXECUTOR_HELPER =
+            ExecutorHelper.forMavenInstallation(MAVEN_HOME, ExecutorHelper.Mode.AUTO);
+
+    private final String basedir;
+
+    private final String[] defaultCliArguments;
+
+    private final String localRepo;
+
+    private final List<String> cliArguments = new ArrayList<>();
+
+    private Properties systemProperties = new Properties();
+
+    private Map<String, String> environmentVariables = new HashMap<>();
+
+    private boolean autoclean = true;
+
+    private Boolean forkJvm;
+
+    private String logFileName = "log.txt";
+
+    public Verifier(String basedir, String settingsFile, boolean debug) throws VerificationException {
+        this(basedir, settingsFile, debug, DEFAULT_CLI_ARGUMENTS);
+    }
+
+    public Verifier(String basedir, String settingsFile, boolean debug, String[] defaultCliArguments)
+            throws VerificationException {
+        this.basedir = basedir;
+        this.defaultCliArguments = defaultCliArguments == null ? new String[0] : defaultCliArguments.clone();
+        this.localRepo = findLocalRepo();
+    }
+
+    /**
+     * Resolves the local repository the way the (deprecated) Verifier did: an explicit
+     * {@code -Dmaven.repo.local} Java System property first, falling back to {@code ~/.m2/repository}.
+     * Unlike the old Verifier, this does not parse {@code settingsFile} for a {@code <localRepository>}
+     * element.
+     */
+    private static String findLocalRepo() {
+        String repo = System.getProperty("maven.repo.local");
+        if (repo == null) {
+            repo = System.getProperty("user.home") + File.separator + ".m2" + File.separator + "repository";
+        }
+        File repoDir = new File(repo);
+        if (!repoDir.exists()) {
+            //noinspection ResultOfMethodCallIgnored
+            repoDir.mkdirs();
+        }
+        return repoDir.getAbsolutePath();
+    }
+
+    public String getBasedir() {
+        return basedir;
+    }
+
+    public String getLocalRepository() {
+        return localRepo;
+    }
+
+    public String getLogFileName() {
+        return logFileName;
+    }
+
+    public void setLogFileName(String logFileName) {
+        if (logFileName == null || logFileName.isEmpty()) {
+            throw new IllegalArgumentException("log file name unspecified");
+        }
+        this.logFileName = logFileName;
+    }
+
+    public void setAutoclean(boolean autoclean) {
+        this.autoclean = autoclean;
+    }
+
+    public void setForkJvm(boolean forkJvm) {
+        this.forkJvm = forkJvm;
+    }
+
+    public void addCliArgument(String cliArgument) {
+        cliArguments.add(cliArgument);
+    }
+
+    public void addCliArguments(String... cliArguments) {
+        Collections.addAll(this.cliArguments, cliArguments);
+    }
+
+    public void setSystemProperties(Properties systemProperties) {
+        this.systemProperties = systemProperties == null ? new Properties() : systemProperties;
+    }
+
+    public void setEnvironmentVariables(Map<String, String> environmentVariables) {
+        this.environmentVariables = environmentVariables == null ? new HashMap<>() : environmentVariables;
+    }
+
+    public String getExecutable() {
+        return MAVEN_HOME.resolve("bin").resolve("mvn").toString();
+    }
+
+    /**
+     * Executes Maven with the accumulated CLI arguments, system properties and environment variables, then
+     * writes the captured stdout/stderr to {@code <basedir>/<logFileName>} so that {@link #loadFile} and the
+     * {@code OutputValidator} log-reading helpers can read it back from disk exactly like the old Verifier did.
+     */
+    public void execute() throws VerificationException {
+        List<String> args = new ArrayList<>();
+        Collections.addAll(args, defaultCliArguments);
+        args.add("-Dmaven.repo.local=" + localRepo);
+        for (String name : systemProperties.stringPropertyNames()) {
+            args.add("-D" + name + "=" + systemProperties.getProperty(name));
+        }
+        if (autoclean) {
+            args.add(CLEAN_CLI_ARGUMENT);
+        }
+        for (String cliArgument : cliArguments) {
+            args.add(cliArgument.replace("${basedir}", basedir));
+        }
+
+        ByteArrayOutputStream stdOut = new ByteArrayOutputStream();
+        ByteArrayOutputStream stdErr = new ByteArrayOutputStream();
+
+        ExecutorRequest.Builder builder = ExecutorRequest.mavenBuilder()
+                .cwd(Paths.get(basedir))
+                .arguments(args)
+                .stdOut(stdOut)
+                .stdErr(stdErr);
+        if (!environmentVariables.isEmpty()) {
+            builder.environmentVariables(environmentVariables);
+        }
+        ExecutorRequest request = builder.build();
+
+        ExecutorHelper.Mode mode = forkJvm == null
+                ? ExecutorHelper.Mode.AUTO
+                : (forkJvm ? ExecutorHelper.Mode.FORKED : ExecutorHelper.Mode.EMBEDDED);
+
+        ExecutorResult result;
+        try {
+            result = EXECUTOR_HELPER.execute(mode, request);
+        } catch (ExecutorException e) {
+            writeLogFile(stdOut, stdErr);
+            throw new VerificationException("Failed to execute Maven", e);
+        }
+
+        writeLogFile(stdOut, stdErr);
+
+        if (!result.success()) {
+            throw new VerificationException("Exit code was non-zero: "
+                    + result.exitCode().orElse(-1) + "; command line and log = \n" + getExecutable() + " "
+                    + join(args) + "\n" + getLogContents());
+        }
+    }
+
+    private void writeLogFile(ByteArrayOutputStream stdOut, ByteArrayOutputStream stdErr) {
+        File logFile = new File(basedir, logFileName);
+        try (OutputStream out = new FileOutputStream(logFile)) {
+            stdOut.writeTo(out);
+            stdErr.writeTo(out);
+        } catch (IOException e) {
+            // best-effort: mirrors the old Verifier which swallowed log-file write failures
+        }
+    }
+
+    private static String join(List<String> args) {
+        StringBuilder sb = new StringBuilder();
+        for (String arg : args) {
+            if (sb.length() > 0) {
+                sb.append(' ');
+            }
+            sb.append(arg);
+        }
+        return sb.toString();
+    }
+
+    private String getLogContents() {
+        try {
+            return new String(Files.readAllBytes(new File(basedir, logFileName).toPath()), StandardCharsets.UTF_8);
+        } catch (IOException e) {
+            return "(Error reading log contents: " + e.getMessage() + ")";
+        }
+    }
+
+    public void verifyErrorFreeLog() throws VerificationException {
+        for (String line : loadFile(basedir, logFileName, false)) {
+            if (stripAnsi(line).contains("[ERROR]") && !isVelocityError(line)) {
+                throw new VerificationException("Error in execution: " + line);
+            }
+        }
+    }
+
+    public void verifyTextInLog(String text) throws VerificationException {
+        for (String line : loadFile(basedir, logFileName, false)) {
+            if (stripAnsi(line).contains(text)) {
+                return;
+            }
+        }
+        throw new VerificationException("Text not found in log: " + text);
+    }
+
+    public void verifyFileNotPresent(String file) throws VerificationException {
+        File expected = new File(file);
+        if (!expected.isAbsolute()) {
+            expected = new File(basedir, file);
+        }
+        if (expected.exists()) {
+            throw new VerificationException("Unwanted file was found: " + expected);
+        }
+    }
+
+    public String getArtifactPath(String gid, String aid, String version, String ext) {
+        return getArtifactPath(gid, aid, version, ext, null);
+    }
+
+    public String getArtifactPath(String gid, String aid, String version, String ext, String classifier) {
+        if (classifier != null && classifier.isEmpty()) {
+            classifier = null;
+        }
+        if ("maven-plugin".equals(ext)) {
+            ext = "jar";
+        } else if ("coreit-artifact".equals(ext)) {
+            ext = "jar";
+            classifier = "it";
+        } else if ("test-jar".equals(ext)) {
+            ext = "jar";
+            classifier = "tests";
+        }
+
+        String repositoryPath = gid.replace('.', '/') + "/" + aid + "/" + version + "/" + aid + "-" + version;
+        if (classifier != null) {
+            repositoryPath += "-" + classifier;
+        }
+        repositoryPath += "." + ext;
+
+        return new File(localRepo, repositoryPath.replace('/', File.separatorChar)).getPath();
+    }
+
+    /**
+     * Loads the (trimmed, non-empty, non-comment) lines of the given file, relative to {@code basedir}.
+     * The third parameter is retained only for source compatibility with call sites ported from the old
+     * Verifier API (which used it to enable {@code ${artifact:g:a:v:ext}} substitution); it is unused here as
+     * none of the surefire-its callers pass {@code true}.
+     */
+    public List<String> loadFile(String basedir, String filename, boolean hasCommand) throws VerificationException {
+        List<String> lines = new ArrayList<>();
+        File file = new File(basedir, filename);
+        if (file.exists()) {
+            try {
+                for (String line : Files.readAllLines(file.toPath(), StandardCharsets.UTF_8)) {
+                    String trimmed = line.trim();
+                    if (!trimmed.startsWith("#") && !trimmed.isEmpty()) {
+                        lines.add(trimmed);
+                    }
+                }
+            } catch (IOException e) {
+                throw new VerificationException(e);
+            }
+        }
+        return lines;
+    }
+
+    /**
+     * Checks whether the specified line is just an error message from Velocity. Especially old versions of
+     * Doxia employ a very noisy Velocity instance.
+     */
+    private static boolean isVelocityError(String line) {
+        return line.contains("VM_global_library.vm") || (line.contains("VM #") && line.contains("macro"));
+    }
+
+    public static String stripAnsi(String msg) {
+        return msg.replaceAll("\u001B\\[[;\\d]*[ -/]*[@-~]", "");
+    }
+}
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1082ParallelJUnit4ParameterizedIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1082ParallelJUnit4ParameterizedIT.java
index 62644de74..359f1f021 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1082ParallelJUnit4ParameterizedIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1082ParallelJUnit4ParameterizedIT.java
@@ -22,11 +22,11 @@
 import java.util.Set;
 import java.util.TreeSet;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
 import org.apache.maven.surefire.its.fixture.SurefireLauncher;
 import org.apache.maven.surefire.its.fixture.TestFile;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1185DoNotSpawnTestsIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1185DoNotSpawnTestsIT.java
index 271753626..860e155c2 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1185DoNotSpawnTestsIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1185DoNotSpawnTestsIT.java
@@ -18,9 +18,9 @@
  */
 package org.apache.maven.surefire.its.jiras;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
 import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.Matchers.containsString;
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1209RerunAndForkCountIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1209RerunAndForkCountIT.java
index f0b9bba86..69ec9da46 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1209RerunAndForkCountIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1209RerunAndForkCountIT.java
@@ -18,9 +18,9 @@
  */
 package org.apache.maven.surefire.its.jiras;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
 import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.containsString;
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1383ScanSessionDependenciesIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1383ScanSessionDependenciesIT.java
index e65f4b4ae..f4f51845a 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1383ScanSessionDependenciesIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1383ScanSessionDependenciesIT.java
@@ -18,9 +18,9 @@
  */
 package org.apache.maven.surefire.its.jiras;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
 import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1993JpmsProvidingModulesIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1993JpmsProvidingModulesIT.java
index b25733ea7..06960d1d3 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1993JpmsProvidingModulesIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1993JpmsProvidingModulesIT.java
@@ -18,9 +18,9 @@
  */
 package org.apache.maven.surefire.its.jiras;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
 import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire2006ShadefireTransformersIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire2006ShadefireTransformersIT.java
index 2125191c6..f76078a7d 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire2006ShadefireTransformersIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire2006ShadefireTransformersIT.java
@@ -18,8 +18,8 @@
  */
 package org.apache.maven.surefire.its.jiras;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.Matchers.is;
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire2065IT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire2065IT.java
index 9b846544f..c5c14ca89 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire2065IT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire2065IT.java
@@ -18,9 +18,9 @@
  */
 package org.apache.maven.surefire.its.jiras;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.hamcrest.Matchers;
 import org.junit.jupiter.api.Test;
 
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire2095FailsafeJvmCrashShouldNotBeIgnoredIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire2095FailsafeJvmCrashShouldNotBeIgnoredIT.java
index 0d9ddf5b2..4512089e8 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire2095FailsafeJvmCrashShouldNotBeIgnoredIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire2095FailsafeJvmCrashShouldNotBeIgnoredIT.java
@@ -18,8 +18,8 @@
  */
 package org.apache.maven.surefire.its.jiras;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.Matchers.containsString;
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire649EmptyStringSystemPropertiesIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire649EmptyStringSystemPropertiesIT.java
index 710de04d9..10b7bb3da 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire649EmptyStringSystemPropertiesIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire649EmptyStringSystemPropertiesIT.java
@@ -18,10 +18,10 @@
  */
 package org.apache.maven.surefire.its.jiras;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
 import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.fail;
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire735ForkFailWithRedirectConsoleOutputIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire735ForkFailWithRedirectConsoleOutputIT.java
index 0552c7155..30813dc8e 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire735ForkFailWithRedirectConsoleOutputIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire735ForkFailWithRedirectConsoleOutputIT.java
@@ -22,10 +22,10 @@
 import java.io.FilenameFilter;
 import java.util.Collection;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
 import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire772NoFailsafeReportsIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire772NoFailsafeReportsIT.java
index 659276ef6..ad138c7b7 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire772NoFailsafeReportsIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire772NoFailsafeReportsIT.java
@@ -18,11 +18,11 @@
  */
 package org.apache.maven.surefire.its.jiras;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
 import org.apache.maven.surefire.its.fixture.SurefireLauncher;
 import org.apache.maven.surefire.its.fixture.TestFile;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire995CategoryInheritanceIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire995CategoryInheritanceIT.java
index dd0b29359..b131feebc 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire995CategoryInheritanceIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire995CategoryInheritanceIT.java
@@ -18,10 +18,10 @@
  */
 package org.apache.maven.surefire.its.jiras;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
 import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.Matchers.containsString;
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/SurefireJUnit4MethodParallelWithSuiteCountIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/SurefireJUnit4MethodParallelWithSuiteCountIT.java
index dec9d61e1..7b832b388 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/SurefireJUnit4MethodParallelWithSuiteCountIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/SurefireJUnit4MethodParallelWithSuiteCountIT.java
@@ -24,10 +24,10 @@
 import java.util.Set;
 import java.util.TreeSet;
 
-import org.apache.maven.shared.verifier.VerificationException;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
 import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.apache.maven.surefire.its.fixture.VerificationException;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;