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;