Skip to content

Commit e2ad3e6

Browse files
Add skipMavenRc to ExecutorRequest and use it in ITs (#10925)
* Add skipMavenRc to ExecutorRequest and use it in ITs ITs should be isolated from the executing system, so: - skip mavenrc in forked mode - exclude MAVEN_ARGS and MAVEN_OPTS from test environments
1 parent d3bd71b commit e2ad3e6

File tree

5 files changed

+57
-8
lines changed

5 files changed

+57
-8
lines changed

impl/maven-executor/src/main/java/org/apache/maven/api/cli/ExecutorRequest.java

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,13 @@ public interface ExecutorRequest {
144144
*/
145145
Optional<OutputStream> stdErr();
146146

147+
/**
148+
* Indicate if {@code ~/.mavenrc} should be skipped during execution.
149+
* <p>
150+
* Affected only for forked executor by adding MAVEN_SKIP_RC environment variable
151+
*/
152+
boolean skipMavenRc();
153+
147154
/**
148155
* Returns {@link Builder} created from this instance.
149156
*/
@@ -160,7 +167,8 @@ default Builder toBuilder() {
160167
jvmArguments().orElse(null),
161168
stdIn().orElse(null),
162169
stdOut().orElse(null),
163-
stdErr().orElse(null));
170+
stdErr().orElse(null),
171+
skipMavenRc());
164172
}
165173

166174
/**
@@ -182,7 +190,8 @@ static Builder mavenBuilder(@Nullable Path installationDirectory) {
182190
null,
183191
null,
184192
null,
185-
null);
193+
null,
194+
false);
186195
}
187196

188197
class Builder {
@@ -197,6 +206,7 @@ class Builder {
197206
private InputStream stdIn;
198207
private OutputStream stdOut;
199208
private OutputStream stdErr;
209+
private boolean skipMavenRc;
200210

201211
private Builder() {}
202212

@@ -212,7 +222,8 @@ private Builder(
212222
List<String> jvmArguments,
213223
InputStream stdIn,
214224
OutputStream stdOut,
215-
OutputStream stdErr) {
225+
OutputStream stdErr,
226+
boolean skipMavenRc) {
216227
this.command = command;
217228
this.arguments = arguments;
218229
this.cwd = cwd;
@@ -224,6 +235,7 @@ private Builder(
224235
this.stdIn = stdIn;
225236
this.stdOut = stdOut;
226237
this.stdErr = stdErr;
238+
this.skipMavenRc = skipMavenRc;
227239
}
228240

229241
@Nonnull
@@ -333,6 +345,12 @@ public Builder stdErr(OutputStream stdErr) {
333345
return this;
334346
}
335347

348+
@Nonnull
349+
public Builder skipMavenRc(boolean skipMavenRc) {
350+
this.skipMavenRc = skipMavenRc;
351+
return this;
352+
}
353+
336354
@Nonnull
337355
public ExecutorRequest build() {
338356
return new Impl(
@@ -346,7 +364,8 @@ public ExecutorRequest build() {
346364
jvmArguments,
347365
stdIn,
348366
stdOut,
349-
stdErr);
367+
stdErr,
368+
skipMavenRc);
350369
}
351370

352371
private static class Impl implements ExecutorRequest {
@@ -361,6 +380,7 @@ private static class Impl implements ExecutorRequest {
361380
private final InputStream stdIn;
362381
private final OutputStream stdOut;
363382
private final OutputStream stdErr;
383+
private final boolean skipMavenRc;
364384

365385
@SuppressWarnings("ParameterNumber")
366386
private Impl(
@@ -374,7 +394,8 @@ private Impl(
374394
List<String> jvmArguments,
375395
InputStream stdIn,
376396
OutputStream stdOut,
377-
OutputStream stdErr) {
397+
OutputStream stdErr,
398+
boolean skipMavenRc) {
378399
this.command = requireNonNull(command);
379400
this.arguments = arguments == null ? List.of() : List.copyOf(arguments);
380401
this.cwd = getCanonicalPath(requireNonNull(cwd));
@@ -386,6 +407,7 @@ private Impl(
386407
this.stdIn = stdIn;
387408
this.stdOut = stdOut;
388409
this.stdErr = stdErr;
410+
this.skipMavenRc = skipMavenRc;
389411
}
390412

391413
@Override
@@ -443,6 +465,11 @@ public Optional<OutputStream> stdErr() {
443465
return Optional.ofNullable(stdErr);
444466
}
445467

468+
@Override
469+
public boolean skipMavenRc() {
470+
return skipMavenRc;
471+
}
472+
446473
@Override
447474
public String toString() {
448475
return getClass().getSimpleName() + "{" + "command='"
@@ -456,7 +483,8 @@ public String toString() {
456483
+ jvmArguments + ", stdinProvider="
457484
+ stdIn + ", stdoutConsumer="
458485
+ stdOut + ", stderrConsumer="
459-
+ stdErr + '}';
486+
+ stdErr + ", skipMavenRc="
487+
+ skipMavenRc + "}";
460488
}
461489
}
462490
}

impl/maven-executor/src/main/java/org/apache/maven/cling/executor/forked/ForkedMavenExecutor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,10 @@ protected int doExecute(ExecutorRequest executorRequest) throws ExecutorExceptio
141141
}
142142
env.remove("MAVEN_ARGS"); // we already used it if configured to do so
143143

144+
if (executorRequest.skipMavenRc()) {
145+
env.put("MAVEN_SKIP_RC", "true");
146+
}
147+
144148
try {
145149
ProcessBuilder pb = new ProcessBuilder()
146150
.directory(executorRequest.cwd().toFile())

its/core-it-suite/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,10 @@ under the License.
538538
<maven.home>${preparedMavenHome}</maven.home>
539539
<maven.it.global-settings.dir>${project.build.testOutputDirectory}</maven.it.global-settings.dir>
540540
</systemPropertyVariables>
541+
<excludedEnvironmentVariables>
542+
<excludedEnvironmentVariable>MAVEN_ARGS</excludedEnvironmentVariable>
543+
<excludedEnvironmentVariable>MAVEN_OPTS</excludedEnvironmentVariable>
544+
</excludedEnvironmentVariables>
541545
</configuration>
542546
</plugin>
543547
<plugin>

its/core-it-suite/src/test/java/org/apache/maven/it/TestSuiteOrdering.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.List;
2828
import java.util.Map;
2929

30+
import org.apache.maven.cling.executor.ExecutorHelper;
3031
import org.junit.jupiter.api.ClassDescriptor;
3132
import org.junit.jupiter.api.ClassOrderer;
3233
import org.junit.jupiter.api.ClassOrdererContext;
@@ -66,10 +67,11 @@ private static void infoProperty(PrintStream info, String property) {
6667
Verifier verifier = new Verifier("");
6768
String mavenVersion = verifier.getMavenVersion();
6869
String executable = verifier.getExecutable();
70+
ExecutorHelper.Mode defaultMode = verifier.getDefaultMode();
6971

7072
out.println("Running integration tests for Maven " + mavenVersion + System.lineSeparator()
7173
+ "\tusing Maven executable: " + executable + System.lineSeparator()
72-
+ "\twith verifier.forkMode: " + System.getProperty("verifier.forkMode", "not defined == fork"));
74+
+ "\twith verifier.forkMode: " + defaultMode);
7375

7476
System.setProperty("maven.version", mavenVersion);
7577

its/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/Verifier.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ public class Verifier {
122122

123123
private Path logFile;
124124

125+
private boolean skipMavenRc = true;
126+
125127
public Verifier(String basedir) throws VerificationException {
126128
this(basedir, null);
127129
}
@@ -170,6 +172,10 @@ public void setExecutable(String executable) {
170172
this.executable = requireNonNull(executable);
171173
}
172174

175+
public ExecutorHelper.Mode getDefaultMode() {
176+
return executorHelper.getDefaultMode();
177+
}
178+
173179
public void execute() throws VerificationException {
174180
List<String> args = new ArrayList<>(defaultCliArguments);
175181
for (String cliArgument : cliArguments) {
@@ -221,7 +227,8 @@ public void execute() throws VerificationException {
221227
.cwd(basedir)
222228
.userHomeDirectory(userHomeDirectory)
223229
.jvmArguments(jvmArguments)
224-
.arguments(args);
230+
.arguments(args)
231+
.skipMavenRc(skipMavenRc);
225232
if (!systemProperties.isEmpty()) {
226233
builder.jvmSystemProperties(new HashMap(systemProperties));
227234
}
@@ -337,6 +344,10 @@ public void setForkJvm(boolean forkJvm) {
337344
this.forkJvm = forkJvm;
338345
}
339346

347+
public void setSkipMavenRc(boolean skipMavenRc) {
348+
this.skipMavenRc = skipMavenRc;
349+
}
350+
340351
public void setHandleLocalRepoTail(boolean handleLocalRepoTail) {
341352
this.handleLocalRepoTail = handleLocalRepoTail;
342353
}

0 commit comments

Comments
 (0)