使用构建后脚本

下面是一个示例,说明如何使用 Invoker 插件运行一组 Maven 项目,然后使用BeanShellGroovy脚本验证它们的输出。在这种情况下,脚本文件的名称是verify.bsh.

<project>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-invoker-plugin</artifactId>
        <version>3.2.2</version>
        <configuration>
          <debug>true</debug>
          <projectsDirectory>src/it</projectsDirectory>
          <preBuildHookScript>setup.bsh</preBuildHookScript>
          <postBuildHookScript>verify.bsh</postBuildHookScript>
        </configuration>
        <executions>
          <execution>
            <id>integration-test</id>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
       </executions>
      </plugin>
    </plugins>
  </build>
</project>

下面是一个示例构建后 BeanShell 脚本 ( verify.bsh),它在构建运行后检查 JAR 文件是否存在。如果 JAR 文件不存在,则脚本会引发异常,导致 Invoker 插件记录构建失败。更准确地说,任何不等于的非空返回值都true将被解释为失败条件。当然,如果脚本由于异常而异常存在,插件也会将相应的构建标记为失败。

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

作为构建后挂钩脚本的补充,您还可以创建将在调用 Maven 之前运行的构建前挂钩脚本。这可以用来为构建做一些准备。

为了允许脚本访问有关测试项目的一些有用数据,Invoker 插件将在运行脚本之前定义以下全局变量:

姓名 类型 描述 自从
basedir java.io.File 测试项目基目录的绝对路径。 1.0
localRepositoryPath java.io.File 用于在测试项目上调用 Maven 的本地存储库的绝对路径。 1.3
context java.util.Map 用于将数据从预构建挂钩脚本传递到构建后挂钩脚本的键值对的存储。 1.4
mavenVersion java.lang.String 在测试项目上执行的 Maven 版本。 1.9

可以在挂钩脚本中访问的其他变量可以通过scriptVariablesInvoker Plugin 配置中的参数定义。