2016-01-20 648 views
1

我正在用Maven3构建一个多模块项目。在一个模块中,它给出了“构建失败”,并说完成我的错误后,我可以使用-rf:moduleName为了继续我的构建。我没有改变任何东西,并且这次用-rf:moduleName作为maven说的并且成功地建立了相同的命令。这种情况可能的原因是什么,而且Maven中的-rf命令不可靠?Maven中的-rf命令是否可靠?

+1

然后你发生的错误随机发生;)也许你可以发布stacktrace和你的POM? – Tunaki

+0

两天前发生的事情,不幸的是,我没有这些文件了。构建持续了40分钟,然后给出了这个错误。这使我对Maven的信任有点恶化:) –

+0

你应该检查日志文件并找出这个...的根本原因......因为这听起来不像Maven问题......当然,pom文件和错误输出会有帮助.. – khmarbaise

回答

2

要么你有一个随机失败的非确定性测试,你需要寻找原因并修复它。

Etiher它仅仅是一个插件行家误差,对于行家为例洁净的插件在某些OS可能会失败,如果使用目标目录(浏览器等),并且可能工作时,它再次执行第二次如果锁是释放。

要么你有快照依赖关系和并行构建,并与其他茶友共享Maven工件存储库,如Nexus或Artifactory。

例如,如果模块A依赖于B,则在您的本地构建中,构建链将为“B,然后A”。如果A不编译,则B被构建并放入本地存储库,但构建项目A时整个构建链会失败。

然后如果使用-rf标志,则构建链不会重新编译B并开始构建从模块A开始。

但是假设你有一个连续的部署,比如Teamcity或者Jenkins,那么项目B可以用相同的版本号(快照)重建并放到共享的中央仓库中。在这种情况下,模块A检索模块B的最后可用快照,该模块不能是正确的工件(如果您有本地修改),并且A编译模块B时可能没有错误。

您可以避免这个问题要么通过完全重建链,要么使用-o标志,这意味着“离线”模式(即Maven将只从本地存储库检索工件)。

要正确修复它,您应该注意错误并调查具体错误的含义。这是一个编译错误?测试失败? Maven插件错误?开始阅读错误信息,它可能会帮助:)

+0

非常感谢您的详细解答。将-o标志添加到maven参数中总是更安全吗? –

+1

您需要避免-o当Maven插件或新增的依赖项在本地存储库中不可用时,因为您有maven从中央存储库下载它,但是当您第一次启动构建时,这个缺失的依赖项将被缓存到本地库。之后,您可以使用-o,直到您在pom中添加新的依赖项 – Prim