protected Result doRun(BuildListener listener) throws Exception { // pick up a list of reporters to run reporters = getProject().createReporters(); MavenModuleSet mms = getProject().getParent(); if (debug) listener.getLogger().println("Reporters=" + reporters); for (BuildWrapper w : mms.getBuildWrappersList()) { Environment e = w.setUp(MavenBuild.this, launcher, listener); if (e == null) { return Result.FAILURE; } buildEnvironments.add(e); } EnvVars envVars = getEnvironment(listener); // buildEnvironments should be set up first MavenInstallation mvn = getProject().getParent().getMaven(); mvn = mvn.forEnvironment(envVars).forNode(Computer.currentComputer().getNode(), listener); MavenInformation mavenInformation = getModuleRoot().act(new MavenVersionCallable(mvn.getHome())); String mavenVersion = mavenInformation.getVersion(); LOGGER.fine( getFullDisplayName() + " is building with mavenVersion " + mavenVersion + " from file " + mavenInformation.getVersionResourcePath()); boolean maven3orLater = MavenUtil.maven3orLater(mavenVersion); ProcessCache.MavenProcess process = MavenBuild.mavenProcessCache.get( launcher.getChannel(), listener, maven3orLater ? new Maven3ProcessFactory( getParent().getParent(), launcher, envVars, getMavenOpts(listener, envVars), null) : new MavenProcessFactory( getParent().getParent(), launcher, envVars, getMavenOpts(listener, envVars), null)); ArgumentListBuilder margs = new ArgumentListBuilder("-N", "-B"); FilePath localRepo = mms.getLocalRepository().locate(MavenBuild.this); if (localRepo != null) // the workspace must be on this node, so getRemote() is safe. margs.add("-Dmaven.repo.local=" + localRepo.getRemote()); if (mms.getAlternateSettings() != null) { if (IOUtils.isAbsolute(mms.getAlternateSettings())) { margs.add("-s").add(mms.getAlternateSettings()); } else { FilePath mrSettings = getModuleRoot().child(mms.getAlternateSettings()); FilePath wsSettings = getWorkspace().child(mms.getAlternateSettings()); if (!wsSettings.exists() && mrSettings.exists()) wsSettings = mrSettings; margs.add("-s").add(wsSettings.getRemote()); } } margs.add("-f", getModuleRoot().child("pom.xml").getRemote()); margs.addTokenized(getProject().getGoals()); Map<String, String> systemProps = new HashMap<String, String>(envVars); // backward compatibility systemProps.put("hudson.build.number", String.valueOf(getNumber())); if (maven3orLater) { // FIXME here for maven 3 builds listener .getLogger() .println("Building single Maven modules is not implemented for Maven 3, yet!"); return Result.ABORTED; } else { boolean normalExit = false; try { Result r = process.call( new Builder( listener, new ProxyImpl(), getProject(), margs.toList(), systemProps)); normalExit = true; return r; } finally { if (normalExit) process.recycle(); else process.discard(); // tear down in reverse order boolean failed = false; for (int i = buildEnvironments.size() - 1; i >= 0; i--) { if (!buildEnvironments.get(i).tearDown(MavenBuild.this, listener)) { failed = true; } } // WARNING The return in the finally clause will trump any return before if (failed) return Result.FAILURE; } } }