maven的依赖传递及冲突

Posted book808

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven的依赖传递及冲突相关的知识,希望对你有一定的参考价值。

A->B(compile)     第一关系: a依赖b   compile

B->C(compile)     第二关系: b依赖c   compile

 

当在A中配置

<dependency>  
            <groupId>com.B</groupId>  
            <artifactId>B</artifactId>  
            <version>1.0</version>  
</dependency>

则会自动导入c包。关系传递如下表:

 

第一          第二

compile

test

provided

runtime

compile

compile

-

-

runtime

test

test

-

-

test

provided

provided

-

provided

provided

runtime

runtime

-

-

runtime

3.依赖冲突的调节

A->B->C->X(1.0)

A->D->X(2.0)

由于只能引入一个版本的包,此时Maven按照最短路径选择导入x(2.0)

 

A->B->X(1.0)

A->D->X(2.0)

路径长度一致,则优先选择第一个,此时导入x(1.0)

 

4.排除依赖

A->B->C(1.0)

此时在A项目中,不想使用C(1.0),而使用C(2.0)

则需要使用exclusion排除B对C(1.0)的依赖。并在A中引入C(2.0).

 

pom.xml中配置

<!--排除B对C的依赖-->

<dependency>  
            <groupId>B</groupId>  
            <artifactId>B</artifactId>  
            <version>0.1</version>  
            <exclusions>
                 <exclusion>
                    <groupId>C</groupId>  
                    <artifactId>C</artifactId><!--无需指定要排除项目的版本号-->
                 </exclusion>
            </exclusions>
</dependency> 

<!---在A中引入C(2.0)-->

<dependency>  
            <groupId>C</groupId>  
            <artifactId>C</artifactId>  
            <version>2.0</version>  
</dependency> 



















以上是关于maven的依赖传递及冲突的主要内容,如果未能解决你的问题,请参考以下文章

Maven依赖传递依赖传递排除依赖冲突

maven依赖管理(依赖配置依赖传递依赖冲突依赖范围)

maven-传递依赖和依赖冲突版本解决

maven-传递依赖和依赖冲突版本解决

[转]Maven类包冲突终极三大解决技巧

是否有一个 Maven 插件可以验证传递依赖项的冲突版本?