From b8adcb43dd73f8bcc3ff00558e0f7e587929cec6 Mon Sep 17 00:00:00 2001 From: imod Date: Tue, 30 Apr 2013 20:38:35 +0200 Subject: [PATCH 1/3] add global maven config to define default settings providers --- core/src/main/java/hudson/tasks/Maven.java | 22 +++++++-- .../java/jenkins/mvn/GlobalMavenConfig.java | 47 +++++++++++++++++++ .../mvn/GlobalMavenConfig/config.groovy | 8 ++++ .../java/hudson/maven/MavenModuleSet.java | 14 ++++-- 4 files changed, 81 insertions(+), 10 deletions(-) create mode 100644 core/src/main/java/jenkins/mvn/GlobalMavenConfig.java create mode 100644 core/src/main/resources/jenkins/mvn/GlobalMavenConfig/config.groovy diff --git a/core/src/main/java/hudson/tasks/Maven.java b/core/src/main/java/hudson/tasks/Maven.java index b7c3a2119b..cf77905fa3 100644 --- a/core/src/main/java/hudson/tasks/Maven.java +++ b/core/src/main/java/hudson/tasks/Maven.java @@ -40,6 +40,7 @@ import hudson.model.Node; import jenkins.model.Jenkins; import jenkins.mvn.DefaultGlobalSettingsProvider; import jenkins.mvn.DefaultSettingsProvider; +import jenkins.mvn.GlobalMavenConfig; import jenkins.mvn.GlobalSettingsProvider; import jenkins.mvn.SettingsProvider; import hudson.model.TaskListener; @@ -163,8 +164,8 @@ public class Maven extends Builder { this.properties = Util.fixEmptyAndTrim(properties); this.jvmOptions = Util.fixEmptyAndTrim(jvmOptions); this.usePrivateRepository = usePrivateRepository; - this.settings = settings != null ? settings : new DefaultSettingsProvider(); - this.globalSettings = globalSettings != null ? globalSettings : new DefaultGlobalSettingsProvider(); + this.settings = settings; + this.globalSettings = globalSettings; } public String getTargets() { @@ -175,14 +176,22 @@ public class Maven extends Builder { * @since 1.491 */ public SettingsProvider getSettings() { - return settings != null ? settings : new DefaultSettingsProvider(); + return settings != null ? settings : GlobalMavenConfig.get().getSettingsProvider(); + } + + protected void setSettings(SettingsProvider settings) { + this.settings = settings; } /** * @since 1.491 */ public GlobalSettingsProvider getGlobalSettings() { - return globalSettings != null ? globalSettings : new DefaultGlobalSettingsProvider(); + return globalSettings != null ? globalSettings : GlobalMavenConfig.get().getGlobalSettingsProvider(); + } + + protected void setGlobalSettings(GlobalSettingsProvider globalSettings) { + this.globalSettings = globalSettings; } public void setUsePrivateRepository(boolean usePrivateRepository) { @@ -420,7 +429,10 @@ public class Maven extends Builder { @Override public Builder newInstance(StaplerRequest req, JSONObject formData) throws FormException { - return req.bindJSON(Maven.class,formData); + Maven m = req.bindJSON(Maven.class,formData); + m.setSettings(GlobalMavenConfig.get().getSettingsProvider()); + m.setGlobalSettings(GlobalMavenConfig.get().getGlobalSettingsProvider()); + return m; } } diff --git a/core/src/main/java/jenkins/mvn/GlobalMavenConfig.java b/core/src/main/java/jenkins/mvn/GlobalMavenConfig.java new file mode 100644 index 0000000000..67ace424e8 --- /dev/null +++ b/core/src/main/java/jenkins/mvn/GlobalMavenConfig.java @@ -0,0 +1,47 @@ +package jenkins.mvn; + +import hudson.Extension; +import jenkins.model.GlobalConfiguration; +import net.sf.json.JSONObject; + +import org.kohsuke.stapler.StaplerRequest; + +//as close as it gets to the global Maven Project configuration +@Extension(ordinal = 50) +public class GlobalMavenConfig extends GlobalConfiguration { + private SettingsProvider settingsProvider; + private GlobalSettingsProvider globalSettingsProvider; + + public GlobalMavenConfig() { + load(); + } + + @Override + public boolean configure(StaplerRequest req, JSONObject json) throws FormException { + req.bindJSON(this, json); + return true; + } + + public void setGlobalSettingsProvider(GlobalSettingsProvider globalSettingsProvider) { + this.globalSettingsProvider = globalSettingsProvider; + save(); + } + + public void setSettingsProvider(SettingsProvider settingsProvider) { + this.settingsProvider = settingsProvider; + save(); + } + + public GlobalSettingsProvider getGlobalSettingsProvider() { + return globalSettingsProvider != null ? globalSettingsProvider : new DefaultGlobalSettingsProvider(); + } + + public SettingsProvider getSettingsProvider() { + return settingsProvider != null ? settingsProvider : new DefaultSettingsProvider(); + } + + public static GlobalMavenConfig get() { + return GlobalConfiguration.all().get(GlobalMavenConfig.class); + } + +} diff --git a/core/src/main/resources/jenkins/mvn/GlobalMavenConfig/config.groovy b/core/src/main/resources/jenkins/mvn/GlobalMavenConfig/config.groovy new file mode 100644 index 0000000000..79e427df0f --- /dev/null +++ b/core/src/main/resources/jenkins/mvn/GlobalMavenConfig/config.groovy @@ -0,0 +1,8 @@ +package jenkins.mvn.GlobalMavenConfig; + +def f = namespace(lib.FormTagLib) + +f.section(title:_("Maven Configuration")) { + f.dropdownDescriptorSelector(title:_("Default settings provider"), field:"settingsProvider") + f.dropdownDescriptorSelector(title:_("Default global settings provider"), field:"globalSettingsProvider") +} diff --git a/maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java b/maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java index d17b8be66a..90b0097265 100644 --- a/maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java +++ b/maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java @@ -94,6 +94,7 @@ import jenkins.model.ModelObjectWithChildren; import jenkins.mvn.DefaultGlobalSettingsProvider; import jenkins.mvn.DefaultSettingsProvider; import jenkins.mvn.FilePathSettingsProvider; +import jenkins.mvn.GlobalMavenConfig; import jenkins.mvn.GlobalSettingsProvider; import jenkins.mvn.GlobalSettingsProviderDescriptor; import jenkins.mvn.SettingsProvider; @@ -284,12 +285,12 @@ public class MavenModuleSet extends AbstractMavenProject Date: Sat, 4 May 2013 17:35:40 +0200 Subject: [PATCH 2/3] try using defaulting of dropdownDescriptorSelector --- core/src/main/java/hudson/tasks/Maven.java | 18 ++++++++++++------ .../resources/hudson/tasks/Maven/config.jelly | 5 +++-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/hudson/tasks/Maven.java b/core/src/main/java/hudson/tasks/Maven.java index cf77905fa3..c2fe89b465 100644 --- a/core/src/main/java/hudson/tasks/Maven.java +++ b/core/src/main/java/hudson/tasks/Maven.java @@ -38,8 +38,6 @@ import hudson.model.Computer; import hudson.model.EnvironmentSpecific; import hudson.model.Node; import jenkins.model.Jenkins; -import jenkins.mvn.DefaultGlobalSettingsProvider; -import jenkins.mvn.DefaultSettingsProvider; import jenkins.mvn.GlobalMavenConfig; import jenkins.mvn.GlobalSettingsProvider; import jenkins.mvn.SettingsProvider; @@ -130,13 +128,13 @@ public class Maven extends Builder { * Provides access to the settings.xml to be used for a build. * @since 1.491 */ - private SettingsProvider settings = new DefaultSettingsProvider(); + private SettingsProvider settings; /** * Provides access to the global settings.xml to be used for a build. * @since 1.491 */ - private GlobalSettingsProvider globalSettings = new DefaultGlobalSettingsProvider(); + private GlobalSettingsProvider globalSettings; private final static String MAVEN_1_INSTALLATION_COMMON_FILE = "bin/maven"; private final static String MAVEN_2_INSTALLATION_COMMON_FILE = "bin/mvn"; @@ -164,8 +162,8 @@ public class Maven extends Builder { this.properties = Util.fixEmptyAndTrim(properties); this.jvmOptions = Util.fixEmptyAndTrim(jvmOptions); this.usePrivateRepository = usePrivateRepository; - this.settings = settings; - this.globalSettings = globalSettings; + this.settings = settings != null ? settings : GlobalMavenConfig.get().getSettingsProvider(); + this.globalSettings = globalSettings != null ? globalSettings : GlobalMavenConfig.get().getGlobalSettingsProvider(); } public String getTargets() { @@ -407,6 +405,14 @@ public class Maven extends Builder { public String getDisplayName() { return Messages.Maven_DisplayName(); } + + public GlobalSettingsProvider getDefaultGlobalSettingsProvider() { + return GlobalMavenConfig.get().getGlobalSettingsProvider(); + } + + public SettingsProvider getDefaultSettingsProvider() { + return GlobalMavenConfig.get().getSettingsProvider(); + } public MavenInstallation[] getInstallations() { return installations; diff --git a/core/src/main/resources/hudson/tasks/Maven/config.jelly b/core/src/main/resources/hudson/tasks/Maven/config.jelly index f08e941d54..adda063149 100644 --- a/core/src/main/resources/hudson/tasks/Maven/config.jelly +++ b/core/src/main/resources/hudson/tasks/Maven/config.jelly @@ -50,7 +50,8 @@ THE SOFTWARE. - + + - + \ No newline at end of file From ad286c5197128e1a625c1a724350ea93b5c406a7 Mon Sep 17 00:00:00 2001 From: imod Date: Sun, 5 May 2013 11:25:51 +0200 Subject: [PATCH 3/3] [FIXED JENKINS-17723] add test cases to verify defaulting global settings providers --- .../java/hudson/maven/MavenProjectTest.java | 28 ++++++++++++++++ .../src/test/java/hudson/tasks/MavenTest.java | 33 +++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/test/src/test/java/hudson/maven/MavenProjectTest.java b/test/src/test/java/hudson/maven/MavenProjectTest.java index 5410a2213d..d53a86ecaa 100644 --- a/test/src/test/java/hudson/maven/MavenProjectTest.java +++ b/test/src/test/java/hudson/maven/MavenProjectTest.java @@ -33,6 +33,11 @@ import hudson.tasks.Shell; import java.io.File; import jenkins.model.Jenkins; +import jenkins.mvn.DefaultGlobalSettingsProvider; +import jenkins.mvn.DefaultSettingsProvider; +import jenkins.mvn.FilePathGlobalSettingsProvider; +import jenkins.mvn.FilePathSettingsProvider; +import jenkins.mvn.GlobalMavenConfig; import org.junit.Assert; import org.jvnet.hudson.test.Bug; @@ -209,4 +214,27 @@ public class MavenProjectTest extends HudsonTestCase { assertEquals(r,m.getRunPostStepsIfResult()); } } + + + public void testDefaultSettingsProvider() throws Exception { + { + MavenModuleSet m = createMavenProject(); + + assertNotNull(m); + assertEquals(DefaultSettingsProvider.class, m.getSettings().getClass()); + assertEquals(DefaultGlobalSettingsProvider.class, m.getGlobalSettings().getClass()); + } + + { + GlobalMavenConfig globalMavenConfig = GlobalMavenConfig.get(); + assertNotNull("No global Maven Config available", globalMavenConfig); + globalMavenConfig.setSettingsProvider(new FilePathSettingsProvider("/tmp/settigns.xml")); + globalMavenConfig.setGlobalSettingsProvider(new FilePathGlobalSettingsProvider("/tmp/global-settigns.xml")); + + MavenModuleSet m = createMavenProject(); + assertEquals(FilePathSettingsProvider.class, m.getSettings().getClass()); + assertEquals("/tmp/settigns.xml", ((FilePathSettingsProvider)m.getSettings()).getPath()); + assertEquals("/tmp/global-settigns.xml", ((FilePathGlobalSettingsProvider)m.getGlobalSettings()).getPath()); + } + } } diff --git a/test/src/test/java/hudson/tasks/MavenTest.java b/test/src/test/java/hudson/tasks/MavenTest.java index 7bd442142e..6daf14b6cd 100644 --- a/test/src/test/java/hudson/tasks/MavenTest.java +++ b/test/src/test/java/hudson/tasks/MavenTest.java @@ -26,6 +26,11 @@ package hudson.tasks; import hudson.model.Build; import hudson.model.FreeStyleProject; import jenkins.model.Jenkins; +import jenkins.mvn.DefaultGlobalSettingsProvider; +import jenkins.mvn.DefaultSettingsProvider; +import jenkins.mvn.FilePathGlobalSettingsProvider; +import jenkins.mvn.FilePathSettingsProvider; +import jenkins.mvn.GlobalMavenConfig; import hudson.model.JDK; import hudson.model.ParametersDefinitionProperty; import hudson.model.Result; @@ -47,6 +52,7 @@ import java.util.Collections; import junit.framework.Assert; +import org.apache.maven.settings.building.FileSettingsSource; import org.jvnet.hudson.test.HudsonTestCase; import com.gargoylesoftware.htmlunit.html.HtmlForm; @@ -196,4 +202,31 @@ public class MavenTest extends HudsonTestCase { System.out.println(buildLog); assertFalse(buildLog.contains("-Dpassword=12345")); } + + public void testDefaultSettingsProvider() throws Exception { + { + FreeStyleProject p = createFreeStyleProject(); + p.getBuildersList().add(new Maven("a", null, "a.pom", "c=d", "-e", true)); + + Maven m = p.getBuildersList().get(Maven.class); + assertNotNull(m); + assertEquals(DefaultSettingsProvider.class, m.getSettings().getClass()); + assertEquals(DefaultGlobalSettingsProvider.class, m.getGlobalSettings().getClass()); + } + + { + GlobalMavenConfig globalMavenConfig = GlobalMavenConfig.get(); + assertNotNull("No global Maven Config available", globalMavenConfig); + globalMavenConfig.setSettingsProvider(new FilePathSettingsProvider("/tmp/settigns.xml")); + globalMavenConfig.setGlobalSettingsProvider(new FilePathGlobalSettingsProvider("/tmp/global-settigns.xml")); + + FreeStyleProject p = createFreeStyleProject(); + p.getBuildersList().add(new Maven("b", null, "b.pom", "c=d", "-e", true)); + + Maven m = p.getBuildersList().get(Maven.class); + assertEquals(FilePathSettingsProvider.class, m.getSettings().getClass()); + assertEquals("/tmp/settigns.xml", ((FilePathSettingsProvider)m.getSettings()).getPath()); + assertEquals("/tmp/global-settigns.xml", ((FilePathGlobalSettingsProvider)m.getGlobalSettings()).getPath()); + } + } }