【发布时间】:2014-01-30 08:57:10
【问题描述】:
我的项目依赖于一个第三方库,这个依赖在我的 POM 中是这样定义的:
<dependency>
<groupId>thirdparty</groupId>
<artifactId>main</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
这个第三方主库又依赖于其他两个库,下面是它的pom中定义的依赖管理的一部分:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>thirdparty</groupId>
<artifactId>x</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>thirdparty</groupId>
<artifactId>y</artifactId>
<version>1.0.0</version>
</dependency>
...
现在第三方 x 库在其 pom 中定义了对 y 的依赖,如下所示:
<dependency>
<groupId>thirdparty</groupId>
<artifactId>y</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
注意快照版本!这看起来像是第三方 pom 中的一个问题,但我无法控制它。
有趣的是,如果您尝试构建它使用的主要第三方项目(解析并安装到本地 repo)正确的 thirdparty:y:1.0.0 版本的工件。但是当我构建我的原始项目时,它会尝试解析第三方的快照版本:y。
我的问题是:
为什么会发生这种情况?我确信 maven 应该选择最接近项目根目录的工件版本,在我的情况下是 1.0.0。
有没有什么方法可以解决这个问题,而不需要向我的项目的 pom 中添加对 thirdparty:y:1.0.0 的显式依赖项?
【问题讨论】:
-
您是否尝试使用
thirdparty:main:1.0.0而不是thirdparty:main:1.0.0-SNAPSHOT? -
通常没有理由使用第三方库的快照版本。如果您想确保某个版本,您可以在自己的 pom 中指定您想要的版本(使用您想要的版本自己指定依赖项),并且绝对可以肯定,将其从依赖于它的依赖项中排除(应该不需要,但这样你就可以清楚地知道是什么导致它首先出现)。
标签: maven