in core/src/main/java/hudson/tasks/Maven.java [290:380]
public boolean perform(AbstractBuild<?,?> build, Launcher launcher, BuildListener listener) throws IOException, InterruptedException {
VariableResolver<String> vr = build.getBuildVariableResolver();
EnvVars env = build.getEnvironment(listener);
String targets = Util.replaceMacro(this.targets,vr);
targets = env.expand(targets);
String pom = env.expand(this.pom);
int startIndex = 0;
int endIndex;
do {
// split targets into multiple invocations of maven separated by |
endIndex = targets.indexOf('|', startIndex);
if (-1 == endIndex) {
endIndex = targets.length();
}
String normalizedTarget = targets
.substring(startIndex, endIndex)
.replaceAll("[\t\r\n]+"," ");
ArgumentListBuilder args = new ArgumentListBuilder();
MavenInstallation mi = getMaven();
if(mi==null) {
String execName = build.getWorkspace().act(new DecideDefaultMavenCommand(normalizedTarget));
args.add(execName);
} else {
mi = mi.forNode(Computer.currentComputer().getNode(), listener);
mi = mi.forEnvironment(env);
String exec = mi.getExecutable(launcher);
if(exec==null) {
listener.fatalError(Messages.Maven_NoExecutable(mi.getHome()));
return false;
}
args.add(exec);
}
if(pom!=null)
args.add("-f",pom);
if(!S_PATTERN.matcher(targets).find()){ // check the given target/goals do not contain settings parameter already
String settingsPath = SettingsProvider.getSettingsRemotePath(getSettings(), build, listener);
if(StringUtils.isNotBlank(settingsPath)){
args.add("-s", settingsPath);
}
}
if(!GS_PATTERN.matcher(targets).find()){
String settingsPath = GlobalSettingsProvider.getSettingsRemotePath(getGlobalSettings(), build, listener);
if(StringUtils.isNotBlank(settingsPath)){
args.add("-gs", settingsPath);
}
}
Set<String> sensitiveVars = build.getSensitiveBuildVariables();
// Inject environment variables only if chosen to do so
if (isInjectBuildVariables()) {
args.addKeyValuePairs("-D", build.getBuildVariables(), sensitiveVars);
}
// Add properties from builder configuration, AFTER the injected build variables.
final VariableResolver<String> resolver = new Union<>(new ByMap<>(env), vr);
args.addKeyValuePairsFromPropertyString("-D", this.properties, resolver, sensitiveVars);
if (usesPrivateRepository())
args.add("-Dmaven.repo.local=" + build.getWorkspace().child(".repository"));
args.addTokenized(normalizedTarget);
wrapUpArguments(args,normalizedTarget,build,launcher,listener);
buildEnvVars(env, mi);
if (!launcher.isUnix()) {
args = args.toWindowsCommand();
}
try {
MavenConsoleAnnotator mca = new MavenConsoleAnnotator(listener.getLogger(),build.getCharset());
int r = launcher.launch().cmds(args).envs(env).stdout(mca).pwd(build.getModuleRoot()).join();
if (0 != r) {
return false;
}
} catch (IOException e) {
Util.displayIOException(e,listener);
Functions.printStackTrace(e, listener.fatalError(Messages.Maven_ExecFailed()));
return false;
}
startIndex = endIndex + 1;
} while (startIndex < targets.length());
return true;
}