Author: bentmann Date: Sun Feb 22 18:24:55 2009 New Revision: 746791 URL: http://svn.apache.org/viewvc?rev=746791&view=rev Log: [MINVOKER-83] Allow to configure different system properties for multi-invocation builds
Added: maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/system1.properties (with props) maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/system2.properties (with props) Modified: maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/invoker.properties maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InvokerMojo.java maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InvokerProperties.java Modified: maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/invoker.properties URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/invoker.properties?rev=746791&r1=746790&r2=746791&view=diff ============================================================================== --- maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/invoker.properties (original) +++ maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/invoker.properties Sun Feb 22 18:24:55 2009 @@ -3,11 +3,12 @@ ####################################### invoker.goals = install invoker.profiles = plugin,profile0 -invoker.mavenOpts = -Dmaven.invoker.test=UTF-8 +invoker.systemPropertiesFile = system1.properties ####################################### # First build ####################################### +# goals should fall back to invoker.goals invoker.profiles.1 = ####################################### @@ -15,11 +16,11 @@ ####################################### invoker.goals.2 = test:test-maven-plugin:0.1-SNAPSHOT:test invoker.profiles.2 = plugin,profile1 -# maven opts should fall back to invoker.mavenOpts +# system properties file should fall back to invoker.systemPropertiesFile ####################################### # Third build ####################################### invoker.goals.3 = test:test-maven-plugin:0.1-SNAPSHOT:test # profiles should fall back to invoker.profiles -invoker.mavenOpts.3 = -Dmaven.invoker.test=ISO-8859-1 +invoker.systemPropertiesFile.3 = system2.properties Added: maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/system1.properties URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/system1.properties?rev=746791&view=auto ============================================================================== --- maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/system1.properties (added) +++ maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/system1.properties Sun Feb 22 18:24:55 2009 @@ -0,0 +1 @@ +maven.invoker.test = UTF-8 Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/system1.properties ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/system1.properties ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/system2.properties URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/system2.properties?rev=746791&view=auto ============================================================================== --- maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/system2.properties (added) +++ maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/system2.properties Sun Feb 22 18:24:55 2009 @@ -0,0 +1 @@ +maven.invoker.test = ISO-8859-1 Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/system2.properties ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/invocation-multiple/src/it/project/system2.properties ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Modified: maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InvokerMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InvokerMojo.java?rev=746791&r1=746790&r2=746791&view=diff ============================================================================== --- maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InvokerMojo.java (original) +++ maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InvokerMojo.java Sun Feb 22 18:24:55 2009 @@ -471,6 +471,11 @@ * # Since plugin version 1.4 * invoker.offline = true * + * # The path to the properties file from which to load system properties, defaults to the + * # filename given by the plugin parameter testPropertiesFile + * # Since plugin version 1.4 + * invoker.systemPropertiesFile = test.properties + * * # An optional human friendly name for this build job to be included in the build reports. * # Since plugin version 1.4 * invoker.name = Test Build 01 @@ -1186,8 +1191,6 @@ List profiles = getProfiles( basedir ); - Properties systemProperties = getTestProperties( basedir ); - Map context = new LinkedHashMap(); FileLogger logger = setupLogger( basedir ); @@ -1202,8 +1205,6 @@ request.setUserSettingsFile( settingsFile ); - request.setProperties( systemProperties ); - request.setInteractive( false ); request.setShowErrors( showErrors ); @@ -1247,16 +1248,23 @@ request.setOffline( false ); + Properties systemProperties = + getSystemProperties( basedir, invokerProperties.getSystemPropertiesFile( invocationIndex ) ); + request.setProperties( systemProperties ); + invokerProperties.configureInvocation( request, invocationIndex ); - try - { - getLog().debug( "Using MAVEN_OPTS: " + request.getMavenOpts() ); - getLog().debug( "Executing: " + new MavenCommandLineBuilder().build( request ) ); - } - catch ( CommandLineConfigurationException e ) + if ( getLog().isDebugEnabled() ) { - getLog().debug( "Failed to display command line: " + e.getMessage() ); + try + { + getLog().debug( "Using MAVEN_OPTS: " + request.getMavenOpts() ); + getLog().debug( "Executing: " + new MavenCommandLineBuilder().build( request ) ); + } + catch ( CommandLineConfigurationException e ) + { + getLog().debug( "Failed to display command line: " + e.getMessage() ); + } } InvocationResult result; @@ -1328,10 +1336,12 @@ * Gets the system properties to use for the specified project. * * @param basedir The base directory of the project, must not be <code>null</code>. + * @param filename The filename to the properties file to load, may be <code>null</code> to use the default path + * given by {...@link #testPropertiesFile}. * @return The system properties to use, may be empty but never <code>null</code>. * @throws MojoExecutionException If the properties file exists but could not be read. */ - private Properties getTestProperties( final File basedir ) + private Properties getSystemProperties( final File basedir, final String filename ) throws MojoExecutionException { Properties collectedTestProperties = new Properties(); @@ -1346,30 +1356,34 @@ collectedTestProperties.putAll( properties ); } - if ( testPropertiesFile != null ) + File propertiesFile = null; + if ( filename != null ) { - final File testProperties = new File( basedir, testPropertiesFile ); + propertiesFile = new File( basedir, filename ); + } + else if ( testPropertiesFile != null ) + { + propertiesFile = new File( basedir, testPropertiesFile ); + } - if ( testProperties.exists() ) + if ( propertiesFile != null && propertiesFile.isFile() ) + { + InputStream fin = null; + try { - InputStream fin = null; - try - { - fin = new FileInputStream( testProperties ); + fin = new FileInputStream( propertiesFile ); - Properties loadedProperties = new Properties(); - loadedProperties.load( fin ); - collectedTestProperties.putAll( loadedProperties ); - } - catch ( IOException e ) - { - throw new MojoExecutionException( "Error reading system properties for test: " - + testPropertiesFile ); - } - finally - { - IOUtil.close( fin ); - } + Properties loadedProperties = new Properties(); + loadedProperties.load( fin ); + collectedTestProperties.putAll( loadedProperties ); + } + catch ( IOException e ) + { + throw new MojoExecutionException( "Error reading system properties from " + propertiesFile ); + } + finally + { + IOUtil.close( fin ); } } Modified: maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InvokerProperties.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InvokerProperties.java?rev=746791&r1=746790&r2=746791&view=diff ============================================================================== --- maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InvokerProperties.java (original) +++ maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InvokerProperties.java Sun Feb 22 18:24:55 2009 @@ -77,6 +77,11 @@ private static final String OFFLINE = "invoker.offline"; /** + * The constant for the invoker property. + */ + private static final String SYSTEM_PROPERTIES_FILE = "invoker.systemPropertiesFile"; + + /** * Creates a new facade for the specified invoker properties. The properties will not be copied, so any changes to * them will be reflected by the facade. * @@ -125,7 +130,8 @@ */ public boolean isInvocationDefined( int index ) { - String[] keys = { PROJECT, GOALS, PROFILES, MAVEN_OPTS, FAILURE_BEHAVIOR, NON_RECURSIVE, OFFLINE }; + String[] keys = + { PROJECT, GOALS, PROFILES, MAVEN_OPTS, FAILURE_BEHAVIOR, NON_RECURSIVE, OFFLINE, SYSTEM_PROPERTIES_FILE }; for ( int i = 0; i < keys.length; i++ ) { if ( properties.getProperty( keys[i] + '.' + index ) != null ) @@ -213,6 +219,17 @@ } /** + * Gets the path to the properties file used to set the system properties for the specified execution. + * + * @param index The index of the invocation for which to check the exit code, must not be negative. + * @return The path to the properties file or <code>null</code> if not set. + */ + public String getSystemPropertiesFile( int index ) + { + return get( SYSTEM_PROPERTIES_FILE, index ); + } + + /** * Gets a value from the invoker properties. The invoker properties are intended to describe the invocation settings * for multiple builds of the same project. For this reason, the properties are indexed. First, a property named * <code>key.index</code> will be queried. If this property does not exist, the value of the property named