diff --git a/impl/maven-executor/src/main/java/org/apache/maven/api/cli/ExecutorRequest.java b/impl/maven-executor/src/main/java/org/apache/maven/api/cli/ExecutorRequest.java index 70e76da74aad..406e1a44047a 100644 --- a/impl/maven-executor/src/main/java/org/apache/maven/api/cli/ExecutorRequest.java +++ b/impl/maven-executor/src/main/java/org/apache/maven/api/cli/ExecutorRequest.java @@ -144,6 +144,13 @@ public interface ExecutorRequest { */ Optional stdErr(); + /** + * Indicate if {@code ~/.mavenrc} should be skipped during execution. + *

+ * Affected only for forked executor by adding MAVEN_SKIP_RC environment variable + */ + boolean skipMavenRc(); + /** * Returns {@link Builder} created from this instance. */ @@ -160,7 +167,8 @@ default Builder toBuilder() { jvmArguments().orElse(null), stdIn().orElse(null), stdOut().orElse(null), - stdErr().orElse(null)); + stdErr().orElse(null), + skipMavenRc()); } /** @@ -182,7 +190,8 @@ static Builder mavenBuilder(@Nullable Path installationDirectory) { null, null, null, - null); + null, + false); } class Builder { @@ -197,6 +206,7 @@ class Builder { private InputStream stdIn; private OutputStream stdOut; private OutputStream stdErr; + private boolean skipMavenRc; private Builder() {} @@ -212,7 +222,8 @@ private Builder( List jvmArguments, InputStream stdIn, OutputStream stdOut, - OutputStream stdErr) { + OutputStream stdErr, + boolean skipMavenRc) { this.command = command; this.arguments = arguments; this.cwd = cwd; @@ -224,6 +235,7 @@ private Builder( this.stdIn = stdIn; this.stdOut = stdOut; this.stdErr = stdErr; + this.skipMavenRc = skipMavenRc; } @Nonnull @@ -333,6 +345,12 @@ public Builder stdErr(OutputStream stdErr) { return this; } + @Nonnull + public Builder skipMavenRc(boolean skipMavenRc) { + this.skipMavenRc = skipMavenRc; + return this; + } + @Nonnull public ExecutorRequest build() { return new Impl( @@ -346,7 +364,8 @@ public ExecutorRequest build() { jvmArguments, stdIn, stdOut, - stdErr); + stdErr, + skipMavenRc); } private static class Impl implements ExecutorRequest { @@ -361,6 +380,7 @@ private static class Impl implements ExecutorRequest { private final InputStream stdIn; private final OutputStream stdOut; private final OutputStream stdErr; + private final boolean skipMavenRc; @SuppressWarnings("ParameterNumber") private Impl( @@ -374,7 +394,8 @@ private Impl( List jvmArguments, InputStream stdIn, OutputStream stdOut, - OutputStream stdErr) { + OutputStream stdErr, + boolean skipMavenRc) { this.command = requireNonNull(command); this.arguments = arguments == null ? List.of() : List.copyOf(arguments); this.cwd = getCanonicalPath(requireNonNull(cwd)); @@ -386,6 +407,7 @@ private Impl( this.stdIn = stdIn; this.stdOut = stdOut; this.stdErr = stdErr; + this.skipMavenRc = skipMavenRc; } @Override @@ -443,6 +465,11 @@ public Optional stdErr() { return Optional.ofNullable(stdErr); } + @Override + public boolean skipMavenRc() { + return skipMavenRc; + } + @Override public String toString() { return getClass().getSimpleName() + "{" + "command='" @@ -456,7 +483,8 @@ public String toString() { + jvmArguments + ", stdinProvider=" + stdIn + ", stdoutConsumer=" + stdOut + ", stderrConsumer=" - + stdErr + '}'; + + stdErr + ", skipMavenRc=" + + skipMavenRc + "}"; } } } diff --git a/impl/maven-executor/src/main/java/org/apache/maven/cling/executor/forked/ForkedMavenExecutor.java b/impl/maven-executor/src/main/java/org/apache/maven/cling/executor/forked/ForkedMavenExecutor.java index 095f07211cfd..eaeddd8ec422 100644 --- a/impl/maven-executor/src/main/java/org/apache/maven/cling/executor/forked/ForkedMavenExecutor.java +++ b/impl/maven-executor/src/main/java/org/apache/maven/cling/executor/forked/ForkedMavenExecutor.java @@ -141,6 +141,10 @@ protected int doExecute(ExecutorRequest executorRequest) throws ExecutorExceptio } env.remove("MAVEN_ARGS"); // we already used it if configured to do so + if (executorRequest.skipMavenRc()) { + env.put("MAVEN_SKIP_RC", "true"); + } + try { ProcessBuilder pb = new ProcessBuilder() .directory(executorRequest.cwd().toFile()) diff --git a/its/core-it-suite/pom.xml b/its/core-it-suite/pom.xml index da726af4d331..2398250421ce 100644 --- a/its/core-it-suite/pom.xml +++ b/its/core-it-suite/pom.xml @@ -538,6 +538,10 @@ under the License. ${preparedMavenHome} ${project.build.testOutputDirectory} + + MAVEN_ARGS + MAVEN_OPTS + diff --git a/its/core-it-suite/src/test/java/org/apache/maven/it/TestSuiteOrdering.java b/its/core-it-suite/src/test/java/org/apache/maven/it/TestSuiteOrdering.java index 001d66b5a9ee..00d6ce115694 100644 --- a/its/core-it-suite/src/test/java/org/apache/maven/it/TestSuiteOrdering.java +++ b/its/core-it-suite/src/test/java/org/apache/maven/it/TestSuiteOrdering.java @@ -27,6 +27,7 @@ import java.util.List; import java.util.Map; +import org.apache.maven.cling.executor.ExecutorHelper; import org.junit.jupiter.api.ClassDescriptor; import org.junit.jupiter.api.ClassOrderer; import org.junit.jupiter.api.ClassOrdererContext; @@ -66,10 +67,11 @@ private static void infoProperty(PrintStream info, String property) { Verifier verifier = new Verifier(""); String mavenVersion = verifier.getMavenVersion(); String executable = verifier.getExecutable(); + ExecutorHelper.Mode defaultMode = verifier.getDefaultMode(); out.println("Running integration tests for Maven " + mavenVersion + System.lineSeparator() + "\tusing Maven executable: " + executable + System.lineSeparator() - + "\twith verifier.forkMode: " + System.getProperty("verifier.forkMode", "not defined == fork")); + + "\twith verifier.forkMode: " + defaultMode); System.setProperty("maven.version", mavenVersion); diff --git a/its/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/Verifier.java b/its/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/Verifier.java index 531cad5e1175..376ed1f7b38e 100644 --- a/its/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/Verifier.java +++ b/its/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/Verifier.java @@ -122,6 +122,8 @@ public class Verifier { private Path logFile; + private boolean skipMavenRc = true; + public Verifier(String basedir) throws VerificationException { this(basedir, null); } @@ -170,6 +172,10 @@ public void setExecutable(String executable) { this.executable = requireNonNull(executable); } + public ExecutorHelper.Mode getDefaultMode() { + return executorHelper.getDefaultMode(); + } + public void execute() throws VerificationException { List args = new ArrayList<>(defaultCliArguments); for (String cliArgument : cliArguments) { @@ -221,7 +227,8 @@ public void execute() throws VerificationException { .cwd(basedir) .userHomeDirectory(userHomeDirectory) .jvmArguments(jvmArguments) - .arguments(args); + .arguments(args) + .skipMavenRc(skipMavenRc); if (!systemProperties.isEmpty()) { builder.jvmSystemProperties(new HashMap(systemProperties)); } @@ -337,6 +344,10 @@ public void setForkJvm(boolean forkJvm) { this.forkJvm = forkJvm; } + public void setSkipMavenRc(boolean skipMavenRc) { + this.skipMavenRc = skipMavenRc; + } + public void setHandleLocalRepoTail(boolean handleLocalRepoTail) { this.handleLocalRepoTail = handleLocalRepoTail; }