public boolean perform()

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;
    }