运行 独立于 mvn clean package 的 maven 多模块故障安全任务

Running maven multi-module failsafe tasks independently from mvn clean package

我有一个多模块项目a。子模块 x 包括一个简单的集成测试,它还需要对子模块 y 的依赖。

我希望能够将编译和打包阶段与 运行测试分开。当我运行以下命令时,集成测试运行成功

mvn clean verify

当我运行以下命令时,它失败了

mvn clean package && mvn failsafe:integration-test failsafe:verify

[ERROR] Failed to execute goal on project x: Could not resolve dependencies for project a:x:jar:1.0-SNAPSHOT: Could not find artifact a:y:jar:1.0-SNAPSHOT -> [Help 1]

根本原因是我想在编译完成后 运行 在单独的 jenkins 任务中分别进行单元测试和各种集成测试(无需再次 运行ning 编译和打包阶段) .可重现的代码在这里 https://github.com/itaifrenkel/failsafe-test。使用 Maven 版本 3.2.1.

澄清:我无法在 jenkins 机器上安装 mvn,因为我有不同 git 版本的并发构建(具有相同的 maven 版本)。

执行mvn clean verify时,构建成功:Maven解析了y依赖,因为它在同一个project reactor and y was packaged successfully into a jar inside this reactor. If you take a look at the log, you will notice that this command triggered the maven-jar-plugin, which is expected since this plugin is bound to the package phase and verify phase comes after it in the build lifecycle.

命令mvn clean package && mvn failsafe:integration-test failsafe:verify实际上执行了2条命令。首先,mvn clean package会成功并打包应用(同理:y在reactor中,被打包成一个jar)。

然而,对于第二个构建,mvn failsafe:integration-test failsafe:verify,由于y没有被打包到reactor中的jar,Maven不能直接解析依赖,所以它需要在存储库中查找它。由于此工件从未安装在存储库中(并且显然在 Maven Central 中不可用),因此无法解决依赖关系,因此出现错误消息

因此,您有 2 种可能的解决方案:

  1. 使用 mvn install:

    y 依赖项安装到本地存储库
    mvn clean install && mvn failsafe:integration-test failsafe:verify
    
  2. 运行 jar:jar 在集成测试之前,以便 Maven 可以解析 y 依赖项。这不会重建项目:它通过简单地要求 maven-jar-plugin 从先前构建的结果中生成 jar 来假设该项目之前已经构建。

    mvn clean package && mvn jar:jar failsafe:integration-test failsafe:verify