Skip to content

Commit

Permalink
Merge pull request #772 from imod/default-maven-settings
Browse files Browse the repository at this point in the history
FIXES JENKINS-17723 - Default maven settings
Good change !
  • Loading branch information
olamy committed May 6, 2013
2 parents 4e37084 + ad286c5 commit 70f457d
Show file tree
Hide file tree
Showing 7 changed files with 155 additions and 16 deletions.
36 changes: 27 additions & 9 deletions core/src/main/java/hudson/tasks/Maven.java
Expand Up @@ -38,8 +38,7 @@
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;
Expand Down Expand Up @@ -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";
Expand Down Expand Up @@ -163,8 +162,8 @@ public Maven(String targets,String name, String pom, String properties, String j
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() {
Expand All @@ -175,14 +174,22 @@ public String getTargets() {
* @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) {
Expand Down Expand Up @@ -398,6 +405,14 @@ public String getHelpFile(String fieldName) {
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;
Expand All @@ -420,7 +435,10 @@ public void setInstallations(MavenInstallation... installations) {

@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;
}
}

Expand Down
47 changes: 47 additions & 0 deletions 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);
}

}
5 changes: 3 additions & 2 deletions core/src/main/resources/hudson/tasks/Maven/config.jelly
Expand Up @@ -50,14 +50,15 @@ THE SOFTWARE.
<f:entry field="usePrivateRepository" title="${%Use private Maven repository}" help="/plugin/maven-plugin/private-repository.html">
<f:checkbox checked="${it.usesPrivateRepository()}" />
</f:entry>
<f:dropdownDescriptorSelector title="${%Settings file}" descriptors="${descriptor.settingsProviders}" field="settings"/>

<f:dropdownDescriptorSelector title="${%Settings file}" field="settings" default="${descriptor.defaultSettingsProvider}"/>
<!--
<f:entry help="/help/tasks/maven/maven-settings.html">
</f:entry>
<f:entry help="/help/tasks/maven/maven-settings.html">
</f:entry>
-->
<f:dropdownDescriptorSelector title="${%Global Settings file}" field="globalSettings" descriptors="${descriptor.globalSettingsProviders}"/>
<f:dropdownDescriptorSelector title="${%Global Settings file}" field="globalSettings" default="${descriptor.defaultGlobalSettingsProvider}"/>
</f:advanced>
</j:jelly>
@@ -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")
}
14 changes: 9 additions & 5 deletions maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java
Expand Up @@ -94,6 +94,7 @@
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;
Expand Down Expand Up @@ -284,12 +285,12 @@ public class MavenModuleSet extends AbstractMavenProject<MavenModuleSet,MavenMod
/**
* @since 1.491
*/
private SettingsProvider settings = new DefaultSettingsProvider();
private SettingsProvider settings;

/**
* @since 1.491
*/
private GlobalSettingsProvider globalSettings = new DefaultGlobalSettingsProvider();
private GlobalSettingsProvider globalSettings;


/**
Expand Down Expand Up @@ -650,14 +651,14 @@ public int getMavenValidationLevel() {
* @since 1.481
*/
public SettingsProvider getSettings() {
return settings != null ? settings : new DefaultSettingsProvider();
return settings != null ? settings : GlobalMavenConfig.get().getSettingsProvider();
}

/**
* @since 1.481
*/
public GlobalSettingsProvider getGlobalSettings() {
return globalSettings != null ? globalSettings : new DefaultGlobalSettingsProvider();
return globalSettings != null ? globalSettings : GlobalMavenConfig.get().getGlobalSettingsProvider();
}

/**
Expand Down Expand Up @@ -1260,7 +1261,10 @@ public String getDisplayName() {
}

public MavenModuleSet newInstance(ItemGroup parent, String name) {
return new MavenModuleSet(parent,name);
MavenModuleSet mms = new MavenModuleSet(parent,name);
mms.setSettings(GlobalMavenConfig.get().getSettingsProvider());
mms.setGlobalSettings(GlobalMavenConfig.get().getGlobalSettingsProvider());
return mms;
}

public Maven.DescriptorImpl getMavenDescriptor() {
Expand Down
28 changes: 28 additions & 0 deletions test/src/test/java/hudson/maven/MavenProjectTest.java
Expand Up @@ -33,6 +33,11 @@
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;
Expand Down Expand Up @@ -209,4 +214,27 @@ public void testConfigRoundtrip() throws Exception {
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());
}
}
}
33 changes: 33 additions & 0 deletions test/src/test/java/hudson/tasks/MavenTest.java
Expand Up @@ -26,6 +26,11 @@
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;
Expand All @@ -47,6 +52,7 @@

import junit.framework.Assert;

import org.apache.maven.settings.building.FileSettingsSource;
import org.jvnet.hudson.test.HudsonTestCase;

import com.gargoylesoftware.htmlunit.html.HtmlForm;
Expand Down Expand Up @@ -196,4 +202,31 @@ public void testSensitiveParameters() throws Exception {
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());
}
}
}

0 comments on commit 70f457d

Please sign in to comment.