Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

假如在某个工程中,依赖如下

    <dependency>
        <groupId>groupA</groupId>
        <artifactId>libA</artifactId>
        <version>1</version>
    </dependency>
    <dependency>
        <groupId>groupB</groupId>
        <artifactId>depB</artifactId>
        <version>2</version>
    </dependency>

libA指明了版本是1,而depB 版本2也依赖libA,如下,没有指明libA的版本

    
    <dependency>
        <groupId>groupA</groupId>
        <artifactId>libA</artifactId>
    </dependency>
    

那么在该工程中,depB版本2依赖的libA的版本是什么决定的?是最新的,还是根据该工程直接依赖的libA的版本决定?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
167 views
Welcome To Ask or Share your Answers For Others

1 Answer

maven依赖原则

1、依赖路径最短优先原则

一个项目Demo依赖了两个jar包,其中A-B-C-X(1.0) , A-D-X(2.0)。由于X(2.0)路径最短,所以项目使用的是X(2.0)。

2、pom文件中申明顺序优先

如果A-B-X(1.0) ,A-C-X(2.0) 这样的路径长度一样怎么办呢?这样的情况下,maven会根据pom文件声明的顺序加载,如果先声明了B,后声明了C,那就最后的依赖就会是X(1.0)。

3、覆写优先

子pom内声明的优先于父pom中的依赖。


最终结果

所以根据最短路径法则,依赖的是<version>1</version>的libA

具体排查和查看依赖使用mvn dependency:tree


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...