Using a Pre-Build Script
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.
Default name of Pre-Build script is prebuild
, you can use name prebuild.bsh
or prebuild.groovy
according to chosen script language.
In Pre-Build scripts you can prepare a test resources for your project.
You can also define a user properties which will be added to executed test project by -D
Maven argument.
Here is an example of groovy script:
def userProperties = context.get('userProperties') def server = new MockServer() userProperties.put('serverHost', server.getHost()) userProperties.put('serverPort', server.getPort())
Now you can use it in test project:
<project> <build> <plugins> <plugin> <groupId>org.example</groupId> <artifactId>my-maven-plugin</artifactId> <version>@project.version@</version> <configuration> <server>${serverHost}:${serverPort}</server> </configuration> <executions> .... </executions> </plugin> </plugins> </build> </project>
Using a Post-Build Script
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
- default value is postbuild
.
<project> <build> <plugins> <plugin> <artifactId>maven-invoker-plugin</artifactId> <version>3.8.1</version> <configuration> <debug>true</debug> <projectsDirectory>src/it</projectsDirectory> <preBuildHookScript>setup</preBuildHookScript> <postBuildHookScript>verify</postBuildHookScript> </configuration> <executions> <execution> <id>integration-test</id> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
Below 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 throws an exception which causes the Invoker Plugin to log that the build failed. More precisely, any non-null return value which does not equal true
will be interpreted as a failure condition. And of course, if the script exits abnormally due to an exception, the plugin will flag the corresponding build as a failure, too.
Example verify.bsh
import java.io.*; File file = new File( basedir, "target/my-test-project-1.0-SNAPSHOT.jar" ); if ( !file.isFile() ) { throw new FileNotFoundException( "Could not find generated JAR: " + file ); }
and similar verify.groovy
def file = new File( basedir, "target/my-test-project-1.0-SNAPSHOT.jar" ) assert file.isFile()
Predefined global variables
To allow the scripts to access some useful data about 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 |
context |
java.util.Map |
The storage of key-value pairs used to pass data from the pre-build hook script to the post-build hook script. | 1.4 |
context.get('userProperties') |
java.util.Properties |
The user properties for executing project | 3.7.0 |
mavenVersion |
java.lang.String |
The version of Maven executing on the test project. | 1.9 |
Additional variables that can be accessed in the hook scripts can be defined through the scriptVariables
parameter in the Invoker Plugin's configuration.