From c8094046150d9fa7b137dae0306a814da8e01ea8 Mon Sep 17 00:00:00 2001 From: abayer Date: Wed, 16 Dec 2009 14:47:49 +0000 Subject: [PATCH] [FIXED HUDSON-2932] Maven projects now properly fall back through project-defined MAVEN_OPTS to globally-defined MAVEN_OPTS to executor environment variable MAVEN_OPTS - also added globally-defined MAVEN_OPTS and related changes git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@24652 71c3de6d-444a-0410-be80-ed276b4c234a --- .../hudson/model/TopLevelItemDescriptor.java | 9 ++ .../hudson/model/Hudson/configure.jelly | 1 + .../java/hudson/maven/MavenModuleSet.java | 38 +++++++- .../hudson/maven/MavenProcessFactory.java | 24 ++++- .../main/java/hudson/maven/ProcessCache.java | 4 + .../hudson/maven/MavenModuleSet/global.jelly | 34 +++++++ .../test/java/hudson/maven/MavenOptsTest.java | 86 ++++++++++++++++++ .../hudson/maven/maven-opts-echo.zip | Bin 0 -> 623 bytes 8 files changed, 193 insertions(+), 3 deletions(-) create mode 100644 maven-plugin/src/main/resources/hudson/maven/MavenModuleSet/global.jelly create mode 100644 test/src/test/java/hudson/maven/MavenOptsTest.java create mode 100644 test/src/test/resources/hudson/maven/maven-opts-echo.zip diff --git a/core/src/main/java/hudson/model/TopLevelItemDescriptor.java b/core/src/main/java/hudson/model/TopLevelItemDescriptor.java index 63ccd900ce..adb1aacae5 100644 --- a/core/src/main/java/hudson/model/TopLevelItemDescriptor.java +++ b/core/src/main/java/hudson/model/TopLevelItemDescriptor.java @@ -23,6 +23,7 @@ */ package hudson.model; +import hudson.ExtensionList; import org.kohsuke.stapler.StaplerRequest; /** @@ -87,4 +88,12 @@ public abstract class TopLevelItemDescriptor extends Descriptor { * Creates a new {@link Job}. */ public abstract TopLevelItem newInstance(String name); + + /** + * Returns all the registered {@link TopLevelItem} descriptors. + */ + public static ExtensionList all() { + return Hudson.getInstance().getExtensionList(TopLevelItemDescriptor.class); + } + } diff --git a/core/src/main/resources/hudson/model/Hudson/configure.jelly b/core/src/main/resources/hudson/model/Hudson/configure.jelly index 402a7a5fd7..8f2a7ebafe 100644 --- a/core/src/main/resources/hudson/model/Hudson/configure.jelly +++ b/core/src/main/resources/hudson/model/Hudson/configure.jelly @@ -159,6 +159,7 @@ THE SOFTWARE. + diff --git a/maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java b/maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java index 49167bced3..0d0fa457e3 100644 --- a/maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java +++ b/maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java @@ -615,9 +615,23 @@ public final class MavenModuleSet extends AbstractMavenProject0)) { + return mavenOpts; + } + else { + return DESCRIPTOR.getGlobalMavenOpts(); + } + } + + /** + * Set mavenOpts. + */ + public void setMavenOpts(String mavenOpts) { + this.mavenOpts = mavenOpts; } /** @@ -753,6 +767,20 @@ public final class MavenModuleSet extends AbstractMavenProject0)) { + mavenOpts = localMavenOpts; + } + } catch (IOException e) { + } catch (InterruptedException e) { + // Don't do anything - this just means the slave isn't running, so we + // don't want to use its MAVEN_OPTS anyway. + } + + } + } + + return envVars.expand(mavenOpts); } public MavenInstallation getMavenInstallation(TaskListener log) throws IOException, InterruptedException { diff --git a/maven-plugin/src/main/java/hudson/maven/ProcessCache.java b/maven-plugin/src/main/java/hudson/maven/ProcessCache.java index 66d4554449..bad99b0c17 100644 --- a/maven-plugin/src/main/java/hudson/maven/ProcessCache.java +++ b/maven-plugin/src/main/java/hudson/maven/ProcessCache.java @@ -112,6 +112,10 @@ public final class ProcessCache { this.systemProperties = channel.call(new GetSystemProperties()); } + public String getMavenOpts() { + return mavenOpts; + } + boolean matches(String mavenOpts,MavenInstallation installation, JDK jdk) { return Util.fixNull(this.mavenOpts).equals(Util.fixNull(mavenOpts)) && this.installation==installation diff --git a/maven-plugin/src/main/resources/hudson/maven/MavenModuleSet/global.jelly b/maven-plugin/src/main/resources/hudson/maven/MavenModuleSet/global.jelly new file mode 100644 index 0000000000..2cb8d13abc --- /dev/null +++ b/maven-plugin/src/main/resources/hudson/maven/MavenModuleSet/global.jelly @@ -0,0 +1,34 @@ + + + + + + + + + + \ No newline at end of file diff --git a/test/src/test/java/hudson/maven/MavenOptsTest.java b/test/src/test/java/hudson/maven/MavenOptsTest.java new file mode 100644 index 0000000000..d411bf7680 --- /dev/null +++ b/test/src/test/java/hudson/maven/MavenOptsTest.java @@ -0,0 +1,86 @@ +package hudson.maven; + +import org.jvnet.hudson.test.HudsonTestCase; +import org.jvnet.hudson.test.Bug; +import org.jvnet.hudson.test.ExtractResourceSCM; +import hudson.EnvVars; +import hudson.Launcher; +import hudson.model.BuildListener; +import hudson.model.Result; +import hudson.util.NullStream; + +import java.io.IOException; +import java.io.PrintWriter; + + +/** + * @author Andrew Bayer + */ +public class MavenOptsTest extends HudsonTestCase { + + public void testEnvMavenOptsNoneInProject() throws Exception { + configureDefaultMaven(); + MavenModuleSet m = createMavenProject(); + m.setScm(new ExtractResourceSCM(getClass().getResource("maven-opts-echo.zip"))); + m.setGoals("validate"); + m.setAssignedLabel(createSlave(null, new EnvVars("MAVEN_OPTS", "-Dhudson.mavenOpt.test=foo")).getSelfLabel()); + + assertBuildStatusSuccess(m.scheduleBuild2(0).get()); + + assertLogContains("[hudson.mavenOpt.test=foo]", m.getLastBuild()); + } + + + public void testEnvMavenOptsOverriddenByProject() throws Exception { + configureDefaultMaven(); + MavenModuleSet m = createMavenProject(); + m.setScm(new ExtractResourceSCM(getClass().getResource("maven-opts-echo.zip"))); + m.setGoals("validate"); + m.setMavenOpts("-Dhudson.mavenOpt.test=bar"); + m.setAssignedLabel(createSlave(null, new EnvVars("MAVEN_OPTS", "-Dhudson.mavenOpt.test=foo")).getSelfLabel()); + + assertBuildStatusSuccess(m.scheduleBuild2(0).get()); + + assertLogContains("[hudson.mavenOpt.test=bar]", m.getLastBuild()); + } + + public void testEnvAndGlobalMavenOptsOverriddenByProject() throws Exception { + configureDefaultMaven(); + MavenModuleSet m = createMavenProject(); + m.setScm(new ExtractResourceSCM(getClass().getResource("maven-opts-echo.zip"))); + m.setGoals("validate"); + m.DESCRIPTOR.setGlobalMavenOpts("-Dhudson.mavenOpt.test=bar"); + m.setAssignedLabel(createSlave(null, new EnvVars("MAVEN_OPTS", "-Dhudson.mavenOpt.test=foo")).getSelfLabel()); + m.setMavenOpts("-Dhudson.mavenOpt.test=baz"); + + assertBuildStatusSuccess(m.scheduleBuild2(0).get()); + + assertLogContains("[hudson.mavenOpt.test=baz]", m.getLastBuild()); + } + + + public void testGlobalMavenOpts() throws Exception { + configureDefaultMaven(); + MavenModuleSet m = createMavenProject(); + m.setScm(new ExtractResourceSCM(getClass().getResource("maven-opts-echo.zip"))); + m.setGoals("validate"); + m.DESCRIPTOR.setGlobalMavenOpts("-Dhudson.mavenOpt.test=bar"); + + assertBuildStatusSuccess(m.scheduleBuild2(0).get()); + + assertLogContains("[hudson.mavenOpt.test=bar]", m.getLastBuild()); + } + + public void testGlobalMavenOptsOverridenByProject() throws Exception { + configureDefaultMaven(); + MavenModuleSet m = createMavenProject(); + m.setScm(new ExtractResourceSCM(getClass().getResource("maven-opts-echo.zip"))); + m.setGoals("validate"); + m.DESCRIPTOR.setGlobalMavenOpts("-Dhudson.mavenOpt.test=bar"); + m.setMavenOpts("-Dhudson.mavenOpt.test=foo"); + + assertBuildStatusSuccess(m.scheduleBuild2(0).get()); + + assertLogContains("[hudson.mavenOpt.test=foo]", m.getLastBuild()); + } +} \ No newline at end of file diff --git a/test/src/test/resources/hudson/maven/maven-opts-echo.zip b/test/src/test/resources/hudson/maven/maven-opts-echo.zip new file mode 100644 index 0000000000000000000000000000000000000000..a0c358b94d577f1594658c3eed2ec87a7fd51b2a GIT binary patch literal 623 zcmWIWW@Zs#U|`^2SZy%Ddg27fhSQ7;3

k7}yzP7z*-p^(u06LPIzim=#}Yc&h<% zX$3a}Bg+eB1_m(E8xos++d!oD{d$hX_0#5T<5ynMv^V#HS!<7>#Nv!eS*y3ICVKiE zyHP*i?u|>9(2d#ecFI4WbK2E||JBss-8a6^H7P%REoyJu26g4>4H-_+d{-_USbmmy z53A{l=_`x&nm-EId;9HycWT#SuYcvLtKV_|*RgpaPEy_~PfxEtdZ>JjZ_9g8)i8~p z@+IBgqJk@q-G2USCtLO5X*Yrw#2MbJecb%Q#2ZD)f^!y6P;3^} zZ@J}c#O!qM^8Sf#C)l#DDp&A07tPTKTd;0h|NME|=9|Y0$`~hkR@w3Pop0E=@UXaz zlEkEi9ffCAA5Y@SW18T+UwFdLs?wk-$C9i*8--4Jmvm9*J6jFQYNuKs=~Z8H6!%V+ zia2%hk*DFWr!M9f74BN@H!Yqq>yhP|IX_g-{Ps9K)5`zM)Nhw^1v1&yS6?YQw~FL5GG|$?{3+wt)(=