用法
此页面提供一般使用信息以及基本示例。该插件通常用于运行和验证项目的集成测试,例如 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/it
IT 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-it
where verify.bsh
will 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*
.