默认情况下,项目将在找到它们的同一目录中执行。这意味着构建输出将与项目文件一起生成。在运行项目之前将项目复制到另一个目录可能会有所帮助,例如target/it。这将允许mvn clean删除所有测试项目生成的输出。
<project> ... <build> <plugins> <plugin> <artifactId>maven-invoker-plugin</artifactId> <version>3.1.0</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 的文件名以这种方式保持不变,因此通过<parent>和<module>元素在 POM 中表达的项目间依赖关系也保持不变。这反过来又允许插件过滤所有参与分叉构建的 POM,而不仅仅是执行的根 POM。
最后但并非最不重要的一点是,一旦项目通过调用程序的执行被克隆和过滤,您可以浏览到克隆的项目并在其上手动调用 Maven。这对于调试构建很有用。