克隆项目

默认情况下,项目将在找到它们的同一目录中执行。这意味着构建输出将与项目文件一起生成。在运行项目之前将项目复制到另一个目录可能会有所帮助,例如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。这对于调试构建很有用。