克隆项目

默认情况下,项目将在找到它们的同一目录中执行。(使用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。这对于调试构建很有用。