用法
此页面提供一般使用信息以及基本示例。该插件通常用于运行和验证项目的集成测试,例如 Maven 插件。这是使用 invoker:run 目标完成的。作为集成测试的准备工作,人们通常希望将测试中的工件暂存到测试存储库中。对于这项工作, invoker:install 可以使用目标。
基本示例
以下示例演示了用于运行集成测试的基本插件配置。让我们假设您的项目的目录结构如下:
./
+- 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>3.2.2</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目标将在该阶段执行,pre-integration-test并将项目的主要工件连同任何附加的工件复制到target/local-repo. 此外,项目的任何本地可访问的父 POM 都将被复制到暂存存储库。最后但同样重要的是,如果您正在运行 reactor 构建,则驻留在 reactor 中的所有项目依赖项也将被暂存。
接下来,invoker:run目标将在该阶段执行integration-test,并将使用配置的包含/排除模式在目录中搜索src/itIT POM。找到 IT POM 的每个目录都将被复制到target/it. 此外,IT POM 将被过滤,即表达式 like@project.version@将替换为项目 POM 中的相应值。这对于确保您的 IT POM 始终引用项目工件的当前构建版本特别方便。您还可以通过您希望用于过滤的插件配置定义其他属性。
一旦过滤了 IT POM,就会在它们上启动 Maven 构建。默认情况下,Invoker 插件将package在 IT POM 上执行阶段,但可以在插件配置中全局更改,或者invoker.properties使用second-it. 同样,系统属性可以通过文件传递给 IT 构建test.properties。该文件src/it/settings.xml可用于为测试指定自定义用户设置。除其他外,这允许您使集成测试将本地存储库用作远程存储库,从而避免耗时的下载central以填充最初空的暂存存储库。请参阅示例快速调用程序插件配置有关此技术的更多详细信息。IT 构建的输出被写入一个名为build.log(例如target/it/first-it/build.log)的日志文件,并允许在集成测试失败时进行诊断。
集成测试完成后,插件将调用可选的构建后挂钩脚本。在示例中,这就是second-itwhere verify.bshwill be run 的情况。该脚本的目的通常是检查集成测试的构建是否成功并且是否产生了预期的输出。查看示例Using a Post Build Script for a code snippet。
只运行一些测试
该插件还支持-Dinvoker.test仅在与参数中使用的模式匹配的目录中运行 IT 的参数。这使您能够快速重新运行单个测试。请参阅此示例命令行:
mvn invoker:run -Dinvoker.test=*MWAR*,simple*
假设子项目的基目录是src/it,插件只会从与路径匹配的目录运行src/it/*MWAR*项目src/it/simple*.



