对于mvn
项目,我们可以使用dependencymanagement
进行版本控制。但是问题也出现了
该项目的父pom:
<parent>
<groupId>com.XXX</groupId>
<artifactId>XXX-dependencies</artifactId>
<version>1.0.0</version>
</parent>
<dependencyManagement>
<dependency>
<groupId>com.YYY</groupId>
<artifactId>YYY-dependencies</artifactId>
<version>1.1.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagement>
如果存在一个名为com.AAA:BBB
的jar,并且同时受com.XXX:XXX-
依赖项和com.YYY:YYY-dependencies
的控制,那么我们如何知道maven最终将使用哪个版本?
是否有工具可以帮助我们识别?
我曾尝试过mvn依赖插件,mvn帮助插件和依赖分析器,但没人能解决。
答案 0 :(得分:0)
以不同的方式思考。我猜您不必从其他依赖项(可传递)中找出哪个版本。您只需要确保AAA:BBB的版本已按预期进入项目即可。
只需在您的pom.xml中添加com.AAA:BBB
(必需的依赖项)作为具有所需版本的显式依赖项即可。这样看起来应该像下面的代码
<parent>
<groupId>com.XXX</groupId>
<artifactId>XXX-dependencies</artifactId>
<version>1.0.0</version>
</parent>
<dependencyManagement>
<dependency>
<groupId>com.YYY</groupId>
<artifactId>YYY-dependencies</artifactId>
<version>1.1.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.AAA</groupId>
<artifactId>AAA-dependencies</artifactId>
<version>BBB</version> <!-- The version you expect -->
<type>pom or jar whatever</type>
<scope>import</scope>
</dependency>
</dependencyManagement>
确保您使用的两个库与该版本在运行时兼容。
答案 1 :(得分:0)
maven遵循一些规则来解决传递依赖关系。 首先是
A.v1
- B.v1
- D.v1
- C.v1
- E.v1
- D.v2
D.v1以上将被消耗,因为与D的最接近的依存关系是A-B-D。
A.v1
- B.v1
- D.v1
- C.v1
- D.v2
在上面,根据最近的依赖性规则,两者都处于同一级别,因此现在将消耗(首先写入)(包括)第一个依赖性。 D.v1。