diff --git a/core/src/main/java/hudson/tasks/Maven.java b/core/src/main/java/hudson/tasks/Maven.java index b7c3a2119b..c2fe89b465 100644 --- a/core/src/main/java/hudson/tasks/Maven.java +++ b/core/src/main/java/hudson/tasks/Maven.java @@ -38,8 +38,7 @@ 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; import hudson.model.TaskListener; @@ -129,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"; @@ -163,8 +162,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 != null ? settings : GlobalMavenConfig.get().getSettingsProvider(); + this.globalSettings = globalSettings != null ? globalSettings : GlobalMavenConfig.get().getGlobalSettingsProvider(); } public String getTargets() { @@ -175,14 +174,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) { @@ -398,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; @@ -420,7 +435,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/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 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