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 );


Reply via email to