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

时间:2015-10-30 09:40:06

标签: maven maven-failsafe-plugin

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

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

mvn clean verify

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

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

[错误]无法在项目x上执行目标:无法解析项目的依赖关系:x:jar:1.0-SNAPSHOT:找不到工件a:y:jar:1.0-SNAPSHOT - > [帮助1]

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

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

1 个答案:

答案 0 :(得分:3)

执行mvn clean verify时,构建成功:Maven解析y依赖项,因为它在同一个project reactor中,并且y已成功打包到{{1}在这个反应堆里面。如果您查看日志,您会注意到此命令触发了jar,这是预期的,因为此插件绑定到maven-jar-plugin阶段并且package阶段在此之后build lifecycle

命令verify实际执行2个命令。首先,mvn clean package && mvn failsafe:integration-test failsafe:verify将成功并打包应用程序(与之前的原因相同:mvn clean package在反应堆中并打包成y)。

但是,对于第二次构建jar,由于mvn failsafe:integration-test failsafe:verify未被打包到反应堆内的y,因此Maven无法直接解析依赖关系,因此需要在存储库中查找它。由于此工件从未安装在存储库中(并且显然在Maven Central中不可用),因此无法解析依赖关系,因此错误消息

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

  1. 使用jar

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

    jar