我有一个多模块项目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版本)的并发版本。
答案 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中不可用),因此无法解析依赖关系,因此错误消息
因此,您有两种可能的解决方案:
使用jar
y
依赖项安装到本地存储库中
mvn install
在集成测试之前运行mvn clean install && mvn failsafe:integration-test failsafe:verify
,以便Maven可以解析jar:jar
依赖项。这不会重建项目:它假设项目之前已经构建过,只需要求y
从前一个版本的结果中生成maven-jar-plugin
。
jar