Maven 中的 -rf 命令不可靠吗?

Is not -rf command in Maven reliable?

我正在使用 Maven3 构建一个多模块项目。在一个模块中,它给出了一个 "build failure" 并在完成我的错误后说,我可以使用 -rf :moduleName 来继续我的构建。我没有做任何更改,这次使用 -rf :moduleName 给出了相同的命令,正如 maven 所说并成功构建的那样。这种情况可能是什么原因,Maven中的-rf命令不可靠?

如果您的 non-deterministic 测试随机失败,您需要查找原因并修复它。

Etiher 它只是一个插件 maven 错误,例如 maven-clean-plugin 如果使用目标目录(explorer 等)可能会在某些 OS 下失败,并且可能会在第二次重新执行时工作释放锁的时间。

要么你有快照依赖和并行构建,并与其他团队成员共享 Maven 工件存储库,比如 Nexus 或 Artifactory。

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

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

但假设您有一个持续部署,如 Teamcity 或 Jenkins,项目 B 可能会使用相同的版本号(快照)重建并放入共享的中央存储库中。在这种情况下,模块 A 检索模块 B 的最后可用快照,这可能不是正确的工件(如果您有本地修改),并且 A 在为模块 B 使用此代码编译时可能没有错误。

你可以通过完全重建链来避免这个问题,或者通过使用 -o 标志,这意味着 "offline" 模式(即 Maven 将仅从本地存储库检索工件)。

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