You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2012/04/17 23:03:12 UTC
svn commit: r1327277 - in /maven/plugins/trunk/maven-invoker-plugin/src:
it/settings.xml
main/java/org/apache/maven/plugin/invoker/AbstractInvokerMojo.java
Author: olamy
Date: Tue Apr 17 21:03:11 2012
New Revision: 1327277
URL: http://svn.apache.org/viewvc?rev=1327277&view=rev
Log:
[MINVOKER-97] Add possibility to inherit settings.xml from calling process
Submitted by Anders Hammar.
Modified:
maven/plugins/trunk/maven-invoker-plugin/src/it/settings.xml
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/AbstractInvokerMojo.java
Modified: maven/plugins/trunk/maven-invoker-plugin/src/it/settings.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/settings.xml?rev=1327277&r1=1327276&r2=1327277&view=diff
==============================================================================
--- maven/plugins/trunk/maven-invoker-plugin/src/it/settings.xml (original)
+++ maven/plugins/trunk/maven-invoker-plugin/src/it/settings.xml Tue Apr 17 21:03:11 2012
@@ -20,6 +20,15 @@ under the License.
-->
<settings>
+ <servers>
+ <!-- server definition used in verification of settings-merge IT -->
+ <server>
+ <id>dummy-it-settings-merge</id>
+ <username>user</username>
+ <password>password</password>
+ </server>
+ </servers>
+
<profiles>
<profile>
<id>it-repo</id>
@@ -29,6 +38,10 @@ under the License.
<properties>
<!-- This property allows the ITs to access the real local repository instead of the isolated one -->
<invoker.repo.local>@localRepository@</invoker.repo.local>
+ <!-- Property used in verification of settings-inherit IT -->
+ <it.settings-inherit>exists</it.settings-inherit>
+ <!-- Property used in verification of settings-merge IT -->
+ <it.settings-merge.1>exists</it.settings-merge.1>
</properties>
<repositories>
<repository>
Modified: maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/AbstractInvokerMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/AbstractInvokerMojo.java?rev=1327277&r1=1327276&r2=1327277&view=diff
==============================================================================
--- maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/AbstractInvokerMojo.java (original)
+++ maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/AbstractInvokerMojo.java Tue Apr 17 21:03:11 2012
@@ -27,8 +27,12 @@ import org.apache.maven.plugin.MojoExecu
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.Interpol
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 @@ public abstract class AbstractInvokerMoj
*
* @param basedir The base directory of the project, must not be <code>null</code>.
* @param pomFile The (already interpolated) POM file, may be <code>null</code> for a POM-less Maven invocation.
- * @param settingsFile The (already interpolated) user settings file for the build, may be <code>null</code> to use
- * the current user settings.
+ * @param settingsFile The (already interpolated) user settings file for the build, may be <code>null</code>. Will be
+ * merged with the settings file of the invoking Maven process.
* @param invokerProperties The properties to use.
* @return <code>true</code> if the project was launched or <code>false</code> if the selector script indicated that
* the project should be skipped.
@@ -1337,7 +1344,66 @@ public abstract class AbstractInvokerMoj
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 );