diff --git a/maven-plugin/src/main/java/hudson/maven/MavenBuild.java b/maven-plugin/src/main/java/hudson/maven/MavenBuild.java index f7915c42114f05b4ac7b278acf32ae4eebeaa9fe..24df91fefac2f362c232989f8a63606b54843da5 100644 --- a/maven-plugin/src/main/java/hudson/maven/MavenBuild.java +++ b/maven-plugin/src/main/java/hudson/maven/MavenBuild.java @@ -35,9 +35,11 @@ import hudson.model.Hudson; import hudson.model.Result; import hudson.model.Run; import hudson.model.Cause.UpstreamCause; +import hudson.model.Environment; import hudson.remoting.Channel; import hudson.scm.ChangeLogSet; import hudson.scm.ChangeLogSet.Entry; +import hudson.tasks.BuildWrapper; import hudson.util.ArgumentListBuilder; import org.apache.maven.BuildFailureException; import org.apache.maven.execution.MavenSession; @@ -458,17 +460,26 @@ public class MavenBuild extends AbstractBuild { 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); - EnvVars envVars = getEnvironment(); + buildEnvironments = new ArrayList(); + for (BuildWrapper w : mms.getBuildWrappers()) { + BuildWrapper.Environment e = w.setUp(MavenBuild.this, launcher, listener); + if (e == null) { + return Result.FAILURE; + } + buildEnvironments.add(e); + } + + EnvVars envVars = getEnvironment(); // buildEnvironments should be set up first ProcessCache.MavenProcess process = mavenProcessCache.get(launcher.getChannel(), listener, new MavenProcessFactory(getParent().getParent(),launcher,envVars,null)); ArgumentListBuilder margs = new ArgumentListBuilder(); margs.add("-N").add("-B"); - MavenModuleSet mms = project.getParent(); if(mms.usesPrivateRepository()) // use the per-project repository. should it be per-module? But that would cost too much in terms of disk // the workspace must be on this node, so getRemote() is safe. @@ -490,6 +501,10 @@ public class MavenBuild extends AbstractBuild { } finally { if(normalExit) process.recycle(); else process.discard(); + for (int i = buildEnvironments.size() - 1; i >= 0; i--) { + buildEnvironments.get(i).tearDown(MavenBuild.this, listener); + buildEnvironments = null; + } } } diff --git a/maven-plugin/src/main/java/hudson/maven/MavenModuleSetBuild.java b/maven-plugin/src/main/java/hudson/maven/MavenModuleSetBuild.java index 4074646d908f2cc2bd90deff793209679854a8f5..13ed0aca144acf910f4e8bf380417870a08dabc7 100644 --- a/maven-plugin/src/main/java/hudson/maven/MavenModuleSetBuild.java +++ b/maven-plugin/src/main/java/hudson/maven/MavenModuleSetBuild.java @@ -330,10 +330,11 @@ public final class MavenModuleSetBuild extends AbstractBuild(); for( BuildWrapper w : wrappers) { - BuildWrapper.Environment e = w.setUp((AbstractBuild)MavenModuleSetBuild.this, launcher, listener); + BuildWrapper.Environment e = w.setUp(MavenModuleSetBuild.this, launcher, listener); if(e==null) return Result.FAILURE; buildEnvironments.add(e); + e.buildEnvVars(envVars); // #3502: too late for getEnvironment to do this } if(!preBuild(listener, project.getPublishers())) @@ -380,7 +381,7 @@ public final class MavenModuleSetBuild extends AbstractBuild=0; i-- ) buildEnvironments.get(i) - .tearDown((AbstractBuild)MavenModuleSetBuild.this, listener); + .tearDown(MavenModuleSetBuild.this, listener); buildEnvironments = null; } }