Author: bentmann Date: Sun Aug 17 11:55:30 2008 New Revision: 686631 URL: http://svn.apache.org/viewvc?rev=686631&view=rev Log: [MINVOKER-58] Allow to declare setup projects which must be run before all the rest
Added: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/ maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/pom.xml (with props) maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/ maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/ maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project1/ maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project1/pom.xml (with props) maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project2/ maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project2/pom.xml (with props) maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project3/ maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project3/pom.xml (with props) maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project4/ maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project4/pom.xml (with props) maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project5/ maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project5/pom.xml (with props) maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/verify.bsh (with props) maven/plugins/trunk/maven-invoker-plugin/src/site/apt/examples/prepare-build-env.apt.vm (with props) Modified: maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InvokerMojo.java maven/plugins/trunk/maven-invoker-plugin/src/site/apt/index.apt maven/plugins/trunk/maven-invoker-plugin/src/site/site.xml Added: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/pom.xml?rev=686631&view=auto ============================================================================== --- maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/pom.xml (added) +++ maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/pom.xml Sun Aug 17 11:55:30 2008 @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one + ~ or more contributor license agreements. See the NOTICE file + ~ distributed with this work for additional information + ~ regarding copyright ownership. The ASF licenses this file + ~ to you under the Apache License, Version 2.0 (the + ~ "License"); you may not use this file except in compliance + ~ with the License. You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, + ~ software distributed under the License is distributed on an + ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + ~ KIND, either express or implied. See the License for the + ~ specific language governing permissions and limitations + ~ under the License. + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>org.apache.maven.plugins.invoker</groupId> + <artifactId>project-setup</artifactId> + <version>1.0-SNAPSHOT</version> + <packaging>pom</packaging> + + <description>Test to check that setup projects are run ahead of the other ones.</description> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-invoker-plugin</artifactId> + <version>@pom.version@</version> + <configuration> + <projectsDirectory>src/it</projectsDirectory> + <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo> + <setupIncludes> + <setupInclude>project3/pom.xml</setupInclude> + </setupIncludes> + <pomIncludes> + <pomInclude>*/pom.xml</pomInclude> + </pomIncludes> + <goals> + <goal>validate</goal> + </goals> + </configuration> + <executions> + <execution> + <id>integration-test</id> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/pom.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project1/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project1/pom.xml?rev=686631&view=auto ============================================================================== --- maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project1/pom.xml (added) +++ maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project1/pom.xml Sun Aug 17 11:55:30 2008 @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>test</groupId> + <artifactId>project1</artifactId> + <version>0.1-SNAPSHOT</version> + <packaging>pom</packaging> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> +</project> Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project1/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project1/pom.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project2/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project2/pom.xml?rev=686631&view=auto ============================================================================== --- maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project2/pom.xml (added) +++ maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project2/pom.xml Sun Aug 17 11:55:30 2008 @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>test</groupId> + <artifactId>project2</artifactId> + <version>0.1-SNAPSHOT</version> + <packaging>pom</packaging> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> +</project> Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project2/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project2/pom.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project3/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project3/pom.xml?rev=686631&view=auto ============================================================================== --- maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project3/pom.xml (added) +++ maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project3/pom.xml Sun Aug 17 11:55:30 2008 @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>test</groupId> + <artifactId>project3</artifactId> + <version>0.1-SNAPSHOT</version> + <packaging>pom</packaging> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> +</project> Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project3/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project3/pom.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project4/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project4/pom.xml?rev=686631&view=auto ============================================================================== --- maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project4/pom.xml (added) +++ maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project4/pom.xml Sun Aug 17 11:55:30 2008 @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>test</groupId> + <artifactId>project4</artifactId> + <version>0.1-SNAPSHOT</version> + <packaging>pom</packaging> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> +</project> Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project4/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project4/pom.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project5/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project5/pom.xml?rev=686631&view=auto ============================================================================== --- maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project5/pom.xml (added) +++ maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project5/pom.xml Sun Aug 17 11:55:30 2008 @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>test</groupId> + <artifactId>project5</artifactId> + <version>0.1-SNAPSHOT</version> + <packaging>pom</packaging> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> +</project> Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project5/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/src/it/project5/pom.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/verify.bsh URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/verify.bsh?rev=686631&view=auto ============================================================================== --- maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/verify.bsh (added) +++ maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/verify.bsh Sun Aug 17 11:55:30 2008 @@ -0,0 +1,41 @@ +import java.io.*; +import java.util.*; +import java.util.regex.*; + +import org.codehaus.plexus.util.*; + +try +{ + File logFile = new File( basedir, "build.log" ); + System.out.println( "Checking for existence of build log: " + logFile ); + if ( !logFile.exists() ) + { + System.out.println( "FAILED!" ); + return false; + } + + String log = FileUtils.fileRead( logFile ); + + System.out.println( "Checking for first build" ); + int index = log.indexOf( "Building: project" ); + if ( !log.substring( index, index + 18 ).equals( "Building: project3" ) ) + { + System.out.println( "FAILED!\n" + log.substring( index, index + 18 ) ); + return false; + } + + System.out.println( "Checking for duplicate build" ); + index = log.indexOf( "Building: project3", index + 1 ); + if ( index >= 0 ) + { + System.out.println( "FAILED!" ); + return false; + } +} +catch( Throwable t ) +{ + t.printStackTrace(); + return false; +} + +return true; Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/verify.bsh ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-invoker-plugin/src/it/project-setup/verify.bsh ------------------------------------------------------------------------------ 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=686631&r1=686630&r2=686631&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 Aug 17 11:55:30 2008 @@ -88,20 +88,19 @@ { /** - * Flag used to suppress certain invocations. This is useful in tailoring the - * build using profiles. - * + * Flag used to suppress certain invocations. This is useful in tailoring the build using profiles. + * * @parameter default-value="false" * @since 1.1 */ private boolean skipInvocation; /** - * Flag used to suppress the summary output notifying of successes and failures. If set to <code>true</code>, - * the only indication of the build's success or failure will be the effect it has on the main - * build (if it fails, the main build should fail as well). If <code>streamLogs</code> is enabled, the sub-build - * summary will also provide an indication. - * + * Flag used to suppress the summary output notifying of successes and failures. If set to <code>true</code>, the + * only indication of the build's success or failure will be the effect it has on the main build (if it fails, the + * main build should fail as well). If [EMAIL PROTECTED] #streamLogs} is enabled, the sub-build summary will also provide an + * indication. + * * @parameter default-value="false" */ private boolean suppressSummaries; @@ -181,6 +180,18 @@ private List pomExcludes = Collections.EMPTY_LIST; /** + * Include patterns for searching the projects directory for projects that need to be run before the other projects. + * This parameter allows to declare projects that perform setup tasks like installing utility artifacts into the + * local repository. Projects matched by these patterns are implicitly excluded from the scan for ordinary projects. + * Also, the exclusions defined by the parameter [EMAIL PROTECTED] #pomExcludes} apply to the setup projects, too. Default + * value is: <code>setup*/pom.xml</code>. + * + * @parameter + * @since 1.3 + */ + private List setupIncludes = Collections.singletonList( "setup*/pom.xml" ); + + /** * The list of goals to execute on each project. Default value is: <code>package</code>. * * @parameter @@ -191,8 +202,8 @@ * The name of the project-specific file that contains the enumeration of goals to execute for that test. * * @parameter expression="${invoker.goalsFile}" default-value="goals.txt" - * @deprecated As of version 1.2, the key [EMAIL PROTECTED] invoker.goals} from the properties file specified by the parameter - * [EMAIL PROTECTED] #invokerPropertiesFile} should be used instead. + * @deprecated As of version 1.2, the key <code>invoker.goals</code> from the properties file specified by the + * parameter [EMAIL PROTECTED] #invokerPropertiesFile} should be used instead. */ private String goalsFile; @@ -300,10 +311,11 @@ /** * A comma separated list of project names to run. Specify this parameter to run individual tests by file name, - * overriding the <code>pomIncludes</code> and <code>pomExcludes</code> parameters. Each pattern you specify here - * will be used to create an include pattern formatted like <code>${projectsDirectory}/<i>pattern</i></code>, so - * you can just type "-Dinvoker.test=FirstTest,SecondTest" to run builds in "${projectsDirectory}/FirstTest" and - * "${projectsDirectory}/SecondTest". + * overriding the [EMAIL PROTECTED] #setupIncludes}, [EMAIL PROTECTED] #pomIncludes} and [EMAIL PROTECTED] #pomExcludes} parameters. Each pattern you + * specify here will be used to create an include pattern formatted like + * <code>${projectsDirectory}/<i>pattern</i></code>, so you can just type + * <code>-Dinvoker.test=FirstTest,SecondTest</code> to run builds in <code>${projectsDirectory}/FirstTest</code> and + * <code>${projectsDirectory}/SecondTest</code>. * * @parameter expression="${invoker.test}" * @since 1.1 @@ -312,11 +324,11 @@ /** * The name of the project-specific file that contains the enumeration of profiles to use for that test. <b>If the - * file exists and empty no profiles will be used even if the profiles is set</b> + * file exists and is empty no profiles will be used even if the parameter [EMAIL PROTECTED] #profiles} is set.</b> * * @parameter expression="${invoker.profilesFile}" default-value="profiles.txt" * @since 1.1 - * @deprecated As of version 1.2, the key [EMAIL PROTECTED] invoker.profiles} from the properties file specified by the + * @deprecated As of version 1.2, the key <code>invoker.profiles</code> from the properties file specified by the * parameter [EMAIL PROTECTED] #invokerPropertiesFile} should be used instead. */ private String profilesFile; @@ -324,7 +336,7 @@ /** * Path to an alternate <code>settings.xml</code> to use for Maven invocation with all ITs. Note that the * <code><localRepository></code> element of this settings file is always ignored, i.e. the path given by the - * parameter <code>localRepositoryPath</code> is dominant. + * parameter [EMAIL PROTECTED] #localRepositoryPath} is dominant. * * @parameter expression="${invoker.settingsFile}" * @since 1.2 @@ -1405,7 +1417,8 @@ /** * Gets the paths to the projects that should be build. Each path may either denote a POM file or merely a project - * base directory. The returned paths will be relative to the projects directory. + * base directory. The returned paths will be relative to the projects directory. Finally note that the order of the + * returned project paths is significant. * * @return The paths to the projects that should be build, may be empty but never <code>null</code>. * @throws IOException If the projects directory could not be scanned. @@ -1417,7 +1430,7 @@ if ( ( pom != null ) && pom.exists() ) { - poms = new String[]{ pom.getAbsolutePath() }; + poms = new String[] { pom.getAbsolutePath() }; } else if ( invokerTest != null ) { @@ -1430,20 +1443,7 @@ includes.add( testRegexes[i] ); } - final FileSet fs = new FileSet(); - - fs.setIncludes( includes ); - //fs.setExcludes( pomExcludes ); - fs.setDirectory( projectsDirectory.getCanonicalPath() ); - fs.setFollowSymlinks( false ); - fs.setUseDefaultExcludes( true ); - - final FileSetManager fsm = new FileSetManager( getLog() ); - - List included = new ArrayList(); - included.addAll( Arrays.asList( fsm.getIncludedFiles( fs ) ) ); - included.addAll( Arrays.asList( fsm.getIncludedDirectories( fs ) ) ); - poms = (String[]) included.toArray( new String[included.size()] ); + poms = scanProjectsDirectory( includes, null ); } else { @@ -1458,59 +1458,82 @@ } } - final FileSet fs = new FileSet(); + String[] setupPoms = scanProjectsDirectory( setupIncludes, excludes ); - fs.setIncludes( pomIncludes ); - fs.setExcludes( excludes ); - fs.setDirectory( projectsDirectory.getCanonicalPath() ); - fs.setFollowSymlinks( false ); - fs.setUseDefaultExcludes( true ); + excludes.addAll( setupIncludes ); + String[] normalPoms = scanProjectsDirectory( pomIncludes, excludes ); - final FileSetManager fsm = new FileSetManager( getLog() ); - - List included = new ArrayList(); - included.addAll( Arrays.asList( fsm.getIncludedFiles( fs ) ) ); - included.addAll( Arrays.asList( fsm.getIncludedDirectories( fs ) ) ); - poms = (String[]) included.toArray( new String[included.size()] ); + poms = new String[setupPoms.length + normalPoms.length]; + System.arraycopy( setupPoms, 0, poms, 0, setupPoms.length ); + System.arraycopy( normalPoms, 0, poms, setupPoms.length, normalPoms.length ); } - poms = relativizePomPaths( poms ); + poms = relativizeProjectPaths( poms ); return poms; } /** - * Relativizes the specified POM paths against the directory specified by [EMAIL PROTECTED] #projectsDirectory} (if possible). - * If a POM path does not denote a sub path of the projects directory, it is returned as is. + * Scans the projects directory for projects to build. Both (POM) files and mere directories will be matched by the + * scanner patterns. + * + * @param includes The include patterns for the scanner, may be <code>null</code>. + * @param excludes The exclude patterns for the scanner, may be <code>null</code> to exclude nothing. + * @return The relative paths to either POM files or project base directories, never <code>null</code>. + * @throws IOException If the project directory could not be scanned. + */ + private String[] scanProjectsDirectory( List includes, List excludes ) + throws IOException + { + final FileSet fs = new FileSet(); + + fs.setIncludes( includes ); + fs.setExcludes( excludes ); + fs.setDirectory( projectsDirectory.getCanonicalPath() ); + fs.setFollowSymlinks( false ); + fs.setUseDefaultExcludes( true ); + + final FileSetManager fsm = new FileSetManager( getLog() ); + + List included = new ArrayList(); + included.addAll( Arrays.asList( fsm.getIncludedFiles( fs ) ) ); + included.addAll( Arrays.asList( fsm.getIncludedDirectories( fs ) ) ); + + return (String[]) included.toArray( new String[included.size()] ); + } + + /** + * Relativizes the specified project paths against the directory specified by [EMAIL PROTECTED] #projectsDirectory} (if + * possible). If a project path does not denote a sub path of the projects directory, it is returned as is. * - * @param pomPaths The POM paths to relativize, must not be <code>null</code> nor contain <code>null</code> + * @param projectPaths The project paths to relativize, must not be <code>null</code> nor contain <code>null</code> * elements. - * @return The relativized POM paths, never <code>null</code>. + * @return The relativized project paths, never <code>null</code>. * @throws IOException If any path could not be relativized. */ - private String[] relativizePomPaths( String[] pomPaths ) + private String[] relativizeProjectPaths( String[] projectPaths ) throws IOException { String projectsDirPath = projectsDirectory.getCanonicalPath(); - String[] results = new String[pomPaths.length]; + String[] results = new String[projectPaths.length]; - for ( int i = 0; i < pomPaths.length; i++ ) + for ( int i = 0; i < projectPaths.length; i++ ) { - String pomPath = pomPaths[i]; + String projectPath = projectPaths[i]; - File pomFile = new File( pomPath ); + File file = new File( projectPath ); - if ( !pomFile.isAbsolute() ) + if ( !file.isAbsolute() ) { - pomFile = new File( projectsDirectory, pomPath ); + file = new File( projectsDirectory, projectPath ); } - String relativizedPath = relativizePath( pomFile, projectsDirPath ); + String relativizedPath = relativizePath( file, projectsDirPath ); if ( relativizedPath == null ) { - relativizedPath = pomPath; + relativizedPath = projectPath; } results[i] = relativizedPath; Added: maven/plugins/trunk/maven-invoker-plugin/src/site/apt/examples/prepare-build-env.apt.vm URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/site/apt/examples/prepare-build-env.apt.vm?rev=686631&view=auto ============================================================================== --- maven/plugins/trunk/maven-invoker-plugin/src/site/apt/examples/prepare-build-env.apt.vm (added) +++ maven/plugins/trunk/maven-invoker-plugin/src/site/apt/examples/prepare-build-env.apt.vm Sun Aug 17 11:55:30 2008 @@ -0,0 +1,75 @@ + ------ + Preparing the Build Environment + ------ + Benjamin Bentmann + ------ + 2008-08-17 + ------ + + ~~ Licensed to the Apache Software Foundation (ASF) under one + ~~ or more contributor license agreements. See the NOTICE file + ~~ distributed with this work for additional information + ~~ regarding copyright ownership. The ASF licenses this file + ~~ to you under the Apache License, Version 2.0 (the + ~~ "License"); you may not use this file except in compliance + ~~ with the License. You may obtain a copy of the License at + ~~ + ~~ http://www.apache.org/licenses/LICENSE-2.0 + ~~ + ~~ Unless required by applicable law or agreed to in writing, + ~~ software distributed under the License is distributed on an + ~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + ~~ KIND, either express or implied. See the License for the + ~~ specific language governing permissions and limitations + ~~ under the License. + + ~~ NOTE: For help with the syntax of this file, see: + ~~ http://maven.apache.org/doxia/references/apt-format.html + +Preparing the Build Environment + + In general, the plugin assumes that the projects to build are unrelated to one other such that their build order does + not matter. However, you might sometimes want to ensure that certain projects are build before others. As a + motivation, imagine that a project performs some kind of common setup for the other projects, e.g. installing utility + artifacts into the local repository. + + Starting with plugin version 1.3, you can declare a group of setup projects that must be run before all the other + projects by means of the parameter <<<\<setupIncludes\>>>> as shown in the following example: + ++---- +<project> + <build> + <plugins> + <plugin> + <artifactId>maven-invoker-plugin</artifactId> + <version>${project.version}</version> + <configuration> + <setupIncludes> + <setupInclude>utility-plugin/pom.xml</setupInclude> + </setupIncludes> + <pomIncludes> + <pomInclude>*/pom.xml</pomInclude> + </pomIncludes> + </configuration> + <executions> + <execution> + <id>integration-test</id> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> ++---- + + This tells the plugin that the project <<<utility-plugin/pom.xml>>> must be run before the other projects selected by + the pattern <<<*/pom.xml>>>. Please note that although the pattern <<<*/pom.xml>>> also matches the path + <<<utility-plugin/pom.xml>>>, this project will not be run twice. In other words, any project selected by both + <<<\<setupIncludes\>>>> and <<<\<pomIncludes\>>>> will only be run once, namely during the setup phase. + + The build order of several such setup projects is still undefined. So if the setup projects have inter-dependencies + that require a certain build order, you should group them by an aggregator POM and feed that into the Invoker Plugin + such that the correct build order will be determined by Maven's multi-module reactor. Propchange: maven/plugins/trunk/maven-invoker-plugin/src/site/apt/examples/prepare-build-env.apt.vm ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-invoker-plugin/src/site/apt/examples/prepare-build-env.apt.vm ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Modified: maven/plugins/trunk/maven-invoker-plugin/src/site/apt/index.apt URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/site/apt/index.apt?rev=686631&r1=686630&r2=686631&view=diff ============================================================================== --- maven/plugins/trunk/maven-invoker-plugin/src/site/apt/index.apt (original) +++ maven/plugins/trunk/maven-invoker-plugin/src/site/apt/index.apt Sun Aug 17 11:55:30 2008 @@ -49,7 +49,7 @@ * Examples - The following example configurations are available: + The following example configurations are available to illustrate selected use cases in more detail: * {{{examples/clone-projects.html}Clone projects}} to a new directory before running. @@ -63,4 +63,6 @@ * {{{examples/invoker-properties.html}Using Invoker Properties}} to configure goals, profiles etc. for individual projects. + * {{{examples/prepare-build-env.html}Preparing the Build Environment}} by building some setup projects before other projects. + [] Modified: maven/plugins/trunk/maven-invoker-plugin/src/site/site.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/site/site.xml?rev=686631&r1=686630&r2=686631&view=diff ============================================================================== --- maven/plugins/trunk/maven-invoker-plugin/src/site/site.xml (original) +++ maven/plugins/trunk/maven-invoker-plugin/src/site/site.xml Sun Aug 17 11:55:30 2008 @@ -36,6 +36,7 @@ <item name="Installing Artifacts" href="examples/install-artifacts.html"/> <item name="Invoker Properties" href="examples/invoker-properties.html"/> <item name="Using a Post Build Script" href="examples/post-build-script.html"/> + <item name="Preparing the Build Environment" href="examples/prepare-build-env.html"/> </menu> </body>