此页面提供一般使用信息以及基本示例。该插件通常用于运行和验证项目的集成测试,例如 Maven 插件。这是使用调用者:运行目标完成的。作为集成测试的准备工作,人们通常希望将测试中的工件暂存到测试存储库中。对于这项工作,可以使用调用者:安装目标。
以下示例演示了用于运行集成测试的基本插件配置。让我们假设您的项目的目录结构如下:
./ +- pom.xml +- src/ +- it/ +- settings.xml +- first-it/ | +- pom.xml | +- src/ +- second-it/ +- pom.xml +- invoker.properties +- test.properties +- verify.bsh +- src/
在此示例中,目录src/it是所有 IT 项目所在的位置。您只需将每个集成测试放入一个不同的子目录中,如first-it和second-it所示。此示例的插件配置如下所示:
<project> ... <build> <plugins> <plugin> <artifactId>maven-invoker-plugin</artifactId> <version>1.8</version> <configuration> <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo> <settingsFile>src/it/settings.xml</settingsFile> <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath> <postBuildHookScript>verify</postBuildHookScript> <!-- no extension required --> </configuration> <executions> <execution> <id>integration-test</id> <goals> <goal>install</goal> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ... </project>
现在,为了让事情顺利进行,只需告诉 Maven 执行生命周期阶段integration-test:
mvn integration-test
首先,invoker:install目标将在预集成测试阶段执行,并将项目的主要工件连同任何附加的工件复制到target/local-repo。此外,项目的任何本地可访问的父 POM 都将被复制到暂存存储库。最后但同样重要的是,如果您正在运行 reactor 构建,则驻留在 reactor 中的所有项目依赖项也将被暂存。
接下来,invoker:run目标将在集成测试阶段执行,并将使用配置的包含/排除模式在目录src/it中搜索 IT POM。找到 IT POM 的每个目录都将被复制到target/it。此外,IT POM 将被过滤,即像@project.version@这样的表达式将被项目POM 中的相应值替换。这对于确保您的 IT POM 始终引用项目工件的当前构建版本特别方便。您还可以通过您希望用于过滤的插件配置定义其他属性。
一旦过滤了 IT POM,就会在它们上启动 Maven 构建。默认情况下,Invoker 插件将在 IT POM 上执行阶段包,但可以在插件配置中全局更改,或者使用调用者属性进行单独的集成测试,如second-it示例中所做的那样。同样,系统属性可以通过文件test.properties传递给 IT 构建。文件src/it/settings.xml可用于为测试指定自定义用户设置。除其他外,这允许您使集成测试使用本地存储库作为远程存储库,避免从中央下载耗时为了填满最初空的临时存储库。有关此技术的更多详细信息,请参阅示例快速调用程序插件配置。IT 构建的输出被写入名为build.log的日志文件(例如target/it/first-it/build.log),并允许在集成测试失败时进行诊断。
集成测试完成后,插件将调用可选的构建后挂钩脚本。在该示例中,将运行verify.bsh的second-it就是这种情况。该脚本的目的通常是检查集成测试的构建是否成功并且是否产生了预期的输出。查看示例Using a Post Build Script for a code snippet。