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