如何确保Maven使用我的某个依赖项所使用的相应快照版本?

时间:2013-10-02 17:00:29

标签: java maven

项目“P”依赖于Project“X”版本LATEST。 X依赖jar“A”版本LATEST。

当我构建项目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?

2 个答案:

答案 0 :(得分:0)

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

由于您说您已控制项目X,因此您应该发布新版本的X,它指定您需要的完全版本的A. Maven中的快照依赖是一个严重的反模式。

答案 1 :(得分:0)

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

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