Index: src/main/java/org/apache/maven/plugin/invoker/AbstractInvokerMojo.java
===================================================================
--- src/main/java/org/apache/maven/plugin/invoker/AbstractInvokerMojo.java (revision 1326561)
+++ src/main/java/org/apache/maven/plugin/invoker/AbstractInvokerMojo.java (working copy)
@@ -27,8 +27,12 @@
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.invoker.model.BuildJob;
import org.apache.maven.plugin.invoker.model.io.xpp3.BuildJobXpp3Writer;
+import org.apache.maven.plugin.registry.TrackableBase;
import org.apache.maven.project.MavenProject;
import org.apache.maven.settings.Settings;
+import org.apache.maven.settings.SettingsUtils;
+import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
+import org.apache.maven.settings.io.xpp3.SettingsXpp3Writer;
import org.apache.maven.shared.invoker.CommandLineConfigurationException;
import org.apache.maven.shared.invoker.DefaultInvocationRequest;
import org.apache.maven.shared.invoker.InvocationRequest;
@@ -50,11 +54,14 @@
import org.codehaus.plexus.util.ReaderFactory;
import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.WriterFactory;
+import org.codehaus.plexus.util.xml.XmlStreamReader;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
+import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
@@ -1283,8 +1290,8 @@
*
* @param basedir The base directory of the project, must not be null.
* @param pomFile The (already interpolated) POM file, may be null for a POM-less Maven invocation.
- * @param settingsFile The (already interpolated) user settings file for the build, may be null to use
- * the current user settings.
+ * @param settingsFile The (already interpolated) user settings file for the build, may be null. Will be
+ * merged with the settings file of the invoking Maven process.
* @param invokerProperties The properties to use.
* @return true if the project was launched or false if the selector script indicated that
* the project should be skipped.
@@ -1337,7 +1344,66 @@
request.setLocalRepositoryDirectory( localRepositoryPath );
- request.setUserSettingsFile( settingsFile );
+ Settings mergedSettings = null;
+ if ( settingsFile != null )
+ {
+ // Have to merge the specified settings file (dominant) and the one of the invoking Maven process
+ Reader reader = null;
+ try
+ {
+ reader = new XmlStreamReader(settingsFile);
+ SettingsXpp3Reader settingsReader = new SettingsXpp3Reader();
+ Settings dominantSettings = settingsReader.read(reader);
+ Settings recessiveSettings = this.settings;
+
+ SettingsUtils.merge( dominantSettings, recessiveSettings, TrackableBase.USER_LEVEL );
+
+ mergedSettings = dominantSettings;
+ getLog().debug( "Merged specified settings file with settings of invoking process" );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new MojoExecutionException( "Could not read specified settings file", e );
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( "Could not read specified settings file", e );
+ }
+ finally
+ {
+ IOUtil.close( reader );
+ }
+ }
+ else
+ {
+ mergedSettings = this.settings;
+ }
+
+ try {
+ File mergedSettingsFile = File.createTempFile( "invoker-settings", ".xml" );
+ SettingsXpp3Writer settingsWriter = new SettingsXpp3Writer();
+ FileWriter fileWriter = null;
+ try
+ {
+ fileWriter = new FileWriter( mergedSettingsFile );
+ settingsWriter.write( fileWriter, mergedSettings );
+ }
+ finally
+ {
+ IOUtil.close( fileWriter );
+ }
+
+ if ( getLog().isDebugEnabled() )
+ {
+ getLog().debug( "Created temporary file for invoker settings.xml: "
+ + mergedSettingsFile.getAbsolutePath() );
+ }
+ request.setUserSettingsFile( mergedSettingsFile );
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( "Could not create temporary file for invoker settings.xml", e );
+ }
request.setInteractive( false );
Index: src/it/settings-inherit/pom.xml
===================================================================
--- src/it/settings-inherit/pom.xml (revision 0)
+++ src/it/settings-inherit/pom.xml (revision 0)
@@ -0,0 +1,58 @@
+
+
+
+
+
+ 4.0.0
+
+ org.apache.maven.plugins.invoker
+ settings-inherit
+ 1.0-SNAPSHOT
+ pom
+
+ Test to check that the settings.xml from the calling process is inherited.
+
+
+ UTF-8
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-invoker-plugin
+ @project.version@
+
+ ${project.build.directory}/it
+ true
+
+
+
+ integration-test
+ initialize
+
+ run
+
+
+
+
+
+
+
Index: src/it/settings-inherit/src/it/project/pom.xml
===================================================================
--- src/it/settings-inherit/src/it/project/pom.xml (revision 0)
+++ src/it/settings-inherit/src/it/project/pom.xml (revision 0)
@@ -0,0 +1,60 @@
+
+
+
+
+
+ 4.0.0
+ test
+ project
+ 0.1-SNAPSHOT
+ pom
+
+
+ UTF-8
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-enforcer-plugin
+ 1.0.1
+
+
+ enforce-property
+
+ enforce
+
+
+
+
+ it.settings-inherit
+ Property not present - settings.xml from calling process not inherited!
+ (exists)$
+
+
+ true
+
+
+
+
+
+
+
Index: src/it/settings.xml
===================================================================
--- src/it/settings.xml (revision 1326561)
+++ src/it/settings.xml (working copy)
@@ -20,6 +20,15 @@
-->
+
+
+
+ dummy-it-settings-merge
+ user
+ password
+
+
+
it-repo
@@ -29,6 +38,10 @@
@localRepository@
+
+ exists
+
+ exists
Index: src/it/settings-merge/pom.xml
===================================================================
--- src/it/settings-merge/pom.xml (revision 0)
+++ src/it/settings-merge/pom.xml (revision 0)
@@ -0,0 +1,60 @@
+
+
+
+
+
+ 4.0.0
+
+ org.apache.maven.plugins.invoker
+ settings-merge
+ 1.0-SNAPSHOT
+ pom
+
+ Test to check that the settings.xml from the calling process is merged with the
+ one specified for m-invoker-p.
+
+
+ UTF-8
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-invoker-plugin
+ @project.version@
+
+ ${project.build.directory}/it
+ true
+ src/it/settings.xml
+
+
+
+ integration-test
+ initialize
+
+ run
+
+
+
+
+
+
+
Index: src/it/settings-merge/src/it/settings.xml
===================================================================
--- src/it/settings-merge/src/it/settings.xml (revision 0)
+++ src/it/settings-merge/src/it/settings.xml (revision 0)
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+ dummy-it-settings-merge
+ user
+ overridden
+
+
+
+
+
+ it-properties
+
+ true
+
+
+ exists
+
+
+
+
Index: src/it/settings-merge/src/it/project/pom.xml
===================================================================
--- src/it/settings-merge/src/it/project/pom.xml (revision 0)
+++ src/it/settings-merge/src/it/project/pom.xml (revision 0)
@@ -0,0 +1,87 @@
+
+
+
+
+
+ 4.0.0
+ test
+ project
+ 0.1-SNAPSHOT
+ pom
+
+
+ UTF-8
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-enforcer-plugin
+ 1.0.1
+
+
+ verify-properties
+
+ enforce
+
+
+
+
+ it.settings-merge.1
+ Property not present - settings.xml from calling process not merged!
+ (exists)$
+
+
+ it.settings-merge.2
+ Property not present - specified settings.xml not merged!
+ (exists)$
+
+
+ true
+
+
+
+
+
+ org.codehaus.gmaven
+ gmaven-plugin
+ 1.4
+
+
+ verify-server
+ validate
+
+ execute
+
+
+
+ def server = settings.servers.find{ it.id.equals('dummy-it-settings-merge') }
+ if( !server.password.equals('overridden') )
+ throw new org.apache.maven.plugin.MojoExecutionException("Incorrect server password - specified settings.xml not merged/dominant")
+
+
+
+
+
+
+
+