Here is an example of how the Invoker Plugin can be used to run a set of Maven projects and then verify their output with a BeanShell or Groovy script. The name of the script file in this case is verify.bsh.
<project> <build> <plugins> <plugin> <artifactId>maven-invoker-plugin</artifactId> <version>1.3</version> <configuration> <debug>true</debug> <projectsDirectory>src/it</projectsDirectory> <pomIncludes> <pomInclude>**/pom.xml</pomInclude> </pomIncludes> <pomExcludes> <pomExclude>**/child*/pom.xml</pomExclude> <pomExclude>**/module*/pom.xml</pomExclude> </pomExcludes> <postBuildHookScript>verify.bsh</postBuildHookScript> </configuration> <executions> <execution> <id>integration-test</id> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
Here is an example post build BeanShell script (verify.bsh) that checks for the existence of a JAR file after the build has run. If the JAR file does not exist, the script returns false which causes the Invoker Plugin to log that the build failed. More precisely, any return value which does not equal true will be interpreted as a failure condition. And of course, if the script exists abnormally due to an exception, the plugin will flag the corresponding build as a failure, too.
import java.io.*; try { File file = new File( basedir, "target/my-test-project-1.0-SNAPSHOT.jar" ); if ( !file.isFile() ) { System.err.println( "Could not find generated JAR: " + file ); return false; } } catch( Throwable t ) { t.printStackTrace(); return false; } return true;
Complementary to the post build hook script, you can also create a pre build hook script that will be run before the invocation of Maven. This can be used to do some preparations for the build.
To allow the scripts to locate files from the test project, the following global variables will be defined by the Invoker Plugin before running the script:
Name | Type | Description | Since |
---|---|---|---|
basedir | java.io.File | The absolute path to the base directory of the test project. | 1.0 |
localRepositoryPath | java.io.File | The absolute path to the local repository used for the Maven invocation on the test project. | 1.3 |