我的项目依赖于第三方库,依赖关系在我的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库依赖于y在其pom中定义的y:
<dependency>
<groupId>thirdparty</groupId>
<artifactId>y</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
注意快照版本!这看起来像第三方poms中的问题,但我无法控制它。
有趣的是,如果你尝试构建主要的第三方项目,它使用(解析并安装到本地仓库)正确的 thirdparty:y:1.0.0 版本的工件。但是当我构建原始项目时,它会尝试解析第三方的快照版本:y。
我的问题是:
为什么会这样?我确信maven应该选择最接近项目根目录的工件版本,在我的情况下将是 1.0.0 。
有没有办法解决这个问题而不向 thirdparty:y:1.0.0 添加显式依赖项到我的项目的pom?
答案 0 :(得分:0)
首先确保您真的需要快照版本。应该正常发布版本(没有-SNAPSHOT)。
如果你确实需要它,这应该可以解决问题:
<properties>
<dependeny.main.version>1.0.0-SNAPSHOT</dependeny.main.version>
<dependeny.x.version>1.0.0</dependeny.x.version>
<dependeny.y.version>1.0.0</dependeny.y.version>
<properties>
<dependencies>
...
<dependency>
<groupId>thirdparty</groupId>
<artifactId>main</artifactId>
</dependency>
<dependency>
<groupId>thirdparty</groupId>
<artifactId>x</artifactId>
</dependency>
<dependency>
<groupId>thirdparty</groupId>
<artifactId>y</artifactId>
</dependency>
...
</dependencies>
<dependencyManagement>
<dependencies>
...
<dependency>
<groupId>thirdparty</groupId>
<artifactId>main</artifactId>
<version>${dependeny.main.version}</version>
<exclusions>
<exclusion>
<groupId>thirdparty</groupId>
<artifactId>x</artifactId>
</exclusion>
<exclusion>
<groupId>thirdparty</groupId>
<artifactId>y</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>thirdparty</groupId>
<artifactId>x</artifactId>
<version>${dependeny.x.version}</version>
<exclusions>
<exclusion>
<groupId>thirdparty</groupId>
<artifactId>y</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>thirdparty</groupId>
<artifactId>y</artifactId>
<version>${dependeny.y.version}</version>
</dependency>
...
</dependencies>
</dependencyManagement>
我希望这可以帮助你。