0

项目“P”依赖于最新的项目“X”版本。X 依赖于最新的 jar "A" 版本。

当我构建项目 P 时,它将拉下当前是 jar 的正确(最新)版本的 X。但是当它尝试构建 X 时,我假设 Maven 将意识到 X 依赖于 jar A,并将尝试获取 A。

我想在构建 P 时强制执行,获取和构建 X 将拉下当 X 将自身发布到存储库时 X 使用的 A 版本。我不想删除可能比 X 将自身发布到存储库时更新的 A 的最新版本。

我认为有多种方法可以解决这种情况。我觉得将 X 构建为 .war 就是其中之一。(我可以控制项目 X,如果需要,可以将其构建为 .war),但我很高兴听到其他建议。如果 X 是 .war 并且具有构建 .war 时使用的 A 版本,当 P 尝试构建时,Maven 是否会尝试检查是否存在更新版本的 A?

4

2 回答 2

0

快照的整个概念都围绕着时间戳。因此,如果在构建时有新的快照版本可用,那么它将被下载。唯一的选择是在离线模式下构建,但我不鼓励这样做。

另一种方法,您可以在工作区中包含所有依赖项目,并在主项目中添加这些项目的依赖项。现在 maven 不会为这些下载 jar,它会引用这些项目中的文件。

于 2013-10-02T17:08:26.327 回答
0

如果 X 没有锁定它所依赖的 A 的版本,那么无需您进一步消除歧义,它将在中央使用绝对最新版本的 A。您可以自己明确指定 A 的版本,但没有“使用以前最新的 A”之类的东西。

既然你说你可以控制项目 X,你应该发布一个新版本的 X,它指定你需要的 A 的确切版本。Maven 中的快照依赖是一种严重的反模式。

于 2013-10-02T17:07:06.517 回答