如何确定版本来自mvn项目?

时间:2018-12-18 09:00:42

标签: java maven dependency-management

对于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帮助插件和依赖分析器,但没人能解决。

2 个答案:

答案 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。