克隆项目
默认情况下,项目将在找到它们的同一目录中执行。(使用invoker插件的项目是maven-plugin打包的除外。在这种情况下,IT项目将被target/its
默认克隆并执行。)这意味着构建输出将与项目文件一起生成。在运行项目之前将项目复制到另一个目录可能会有所帮助,例如target/it
. 这将允许mvn clean
删除所有测试项目生成的输出。
<project> ... <build> <plugins> <plugin> <artifactId>maven-invoker-plugin</artifactId> <version>3.2.2</version> <configuration> <projectsDirectory>src/it</projectsDirectory> <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo> </configuration> <executions> <execution> <id>integration-test</id> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ... </project>
除了保持源树没有构建输出之外,将项目克隆到临时位置还有另一个好处。当项目没有被克隆时,插件必须使用临时 POM 来执行它们的过滤。相反,克隆项目使插件能够简单地过滤克隆的 POM。由于 POM 的文件名以这种方式保持不变,因此在 POM 中通过<parent>
和<module>
元素表示的项目间依赖关系也保持不变。这反过来又允许插件过滤所有参与分叉构建的 POM,而不仅仅是执行的根 POM。
最后但同样重要的是,一旦项目被克隆并通过执行过滤invoker:run
,您可以浏览到克隆的项目并在其上手动调用 Maven。这对于调试构建很有用。