Author: olamy
Date: Tue Apr 24 14:43:07 2012
New Revision: 1329747
URL: http://svn.apache.org/viewvc?rev=1329747&view=rev
Log:
prevent IllegalStateException on setting merging
Modified:
maven/plugins/trunk/maven-invoker-plugin/pom.xml
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/AbstractInvokerMojo.java
Modified: maven/plugins/trunk/maven-invoker-plugin/pom.xml
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/pom.xml?rev=1329747&r1=1329746&r2=1329747&view=diff
==============================================================================
--- maven/plugins/trunk/maven-invoker-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-invoker-plugin/pom.xml Tue Apr 24 14:43:07 2012
@@ -291,6 +291,7 @@ under the License.
<postBuildHookScript>verify</postBuildHookScript>
<localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
<settingsFile>src/it/settings.xml</settingsFile>
+
<mavenOpts>-Djava.io.tmpdir=${project.build.directory}</mavenOpts>
<goals>
<goal>clean</goal>
<goal>initialize</goal>
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=1329747&r1=1329746&r2=1329747&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 24 14:43:07 2012
@@ -1000,6 +1000,10 @@ public abstract class AbstractInvokerMoj
localRepositoryPath.mkdirs();
}
+ //-----------------------------------------------
+ // interpolate settings file
+ //-----------------------------------------------
+
File interpolatedSettingsFile = null;
if ( settingsFile != null )
{
@@ -1015,12 +1019,85 @@ public abstract class AbstractInvokerMoj
buildInterpolatedFile( settingsFile, interpolatedSettingsFile );
}
+ //-----------------------------------------------
+ // merge settings file
+ //-----------------------------------------------
+
+ SettingsXpp3Writer settingsWriter = new SettingsXpp3Writer();
+
+ File mergedSettingsFile;
+ Settings mergedSettings = null;
+ if ( interpolatedSettingsFile != null )
+ {
+ // Have to merge the specified settings file (dominant) and the
one of the invoking Maven process
+ Reader reader = null;
+ try
+ {
+ reader = new XmlStreamReader( interpolatedSettingsFile );
+ 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
+ {
+ mergedSettingsFile = File.createTempFile( "invoker-settings",
".xml" );
+
+ FileWriter fileWriter = null;
+ try
+ {
+ fileWriter = new FileWriter( mergedSettingsFile );
+ settingsWriter.write( fileWriter, mergedSettings );
+ //FIXME olamy debug stuff to remove
+ FileUtils.copyFile( mergedSettingsFile, new File(
mergedSettingsFile.getParent(), "copy.xml" ) );
+ }
+ finally
+ {
+ IOUtil.close( fileWriter );
+ }
+
+ if ( getLog().isDebugEnabled() )
+ {
+ getLog().debug(
+ "Created temporary file for invoker settings.xml: " +
mergedSettingsFile.getAbsolutePath() );
+ }
+
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( "Could not create temporary file
for invoker settings.xml", e );
+ }
+
+ final File finalSettingsFile = mergedSettingsFile;
+
try
{
if ( isParallelRun() )
{
getLog().info( "use parallelThreads " + parallelThreads );
- final File finalInterpolatedSettingsFile =
interpolatedSettingsFile;
+
ExecutorService executorService =
Executors.newFixedThreadPool( parallelThreads );
for ( int i = 0; i < buildJobs.length; i++ )
{
@@ -1032,7 +1109,7 @@ public abstract class AbstractInvokerMoj
{
try
{
- runBuild( projectsDir, project,
finalInterpolatedSettingsFile );
+ runBuild( projectsDir, project,
finalSettingsFile );
}
catch ( MojoExecutionException e )
{
@@ -1059,7 +1136,7 @@ public abstract class AbstractInvokerMoj
for ( int i = 0; i < buildJobs.length; i++ )
{
BuildJob project = buildJobs[i];
- runBuild( projectsDir, project, interpolatedSettingsFile );
+ runBuild( projectsDir, project, finalSettingsFile );
}
}
}
@@ -1069,6 +1146,11 @@ public abstract class AbstractInvokerMoj
{
interpolatedSettingsFile.delete();
}
+ if ( mergedSettingsFile != null && mergedSettingsFile.exists() )
+ {
+ mergedSettingsFile.delete();
+ }
+
}
}
@@ -1344,67 +1426,6 @@ public abstract class AbstractInvokerMoj
request.setLocalRepositoryDirectory( localRepositoryPath );
- 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 );
request.setShowErrors( showErrors );
@@ -1413,6 +1434,7 @@ public abstract class AbstractInvokerMoj
request.setShowVersion( showVersion );
+
if ( logger != null )
{
request.setErrorHandler( logger );
@@ -1450,6 +1472,8 @@ public abstract class AbstractInvokerMoj
request.setOffline( false );
+ request.setUserSettingsFile( settingsFile );
+
Properties systemProperties =
getSystemProperties( basedir,
invokerProperties.getSystemPropertiesFile( invocationIndex ) );
request.setProperties( systemProperties );