千家信息网

maven的依赖特性以及冲突解决是什么

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,maven的依赖特性以及冲突解决是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.maven依赖的几个特性1.1 依赖范围 -
千家信息网最后更新 2024年09月22日maven的依赖特性以及冲突解决是什么

maven的依赖特性以及冲突解决是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1.maven依赖的几个特性

1.1 依赖范围 -scope标签

maven在构建过程有3套classpath,我们会根据配置依赖的范围 依赖不同的classpath,如下图:

compile: 默认是compile,对 编译 测试 运行 都有效

provided: 对编译和测试classpath有效,运行的时候不需要加入,例如 jsp 依赖 searvlet api ,比如我们在编译和测试的时候有效但是在运行的时候 容器已经提供servletapi,如果加入会造成冲突

runtime: 只在测试和运行时 有效,比较典型的例子 jdbc api,只有在启动代码测试或者运行的时候才会启用

test: 只会在测试时有效,比较典型例子 就是junit ,只有再测试的时候 才会启用

1.2 依赖传递

比如我们引入某一个依赖spring-test,依赖传递特性会很方便帮助我们下来它相关的依赖,而不必有时会因为引入jar有问题而烦恼,但是也有弊端,存在一些不必要的依赖,可能会造成冲突。

1.3 依赖排除 -exclusion标签

依赖排除的特性 也是为了解决依赖冲突的一个方法,很方便去除依赖传递过程中不必要的依赖。在下面依赖冲冲突会用到 该标签。

1.4 依赖冲突产生原因

使用maven久了会发现存在依赖冲突的问题,由于依赖的传递特性会引入很多隐式的依赖和现有显示jar版本 所冲突,从而造成版本冲突的问题。要解决这个问题,首先就是要查看pom.xml显式和隐式的依赖类包, 然后通过这个类包树找出我们不想要的依赖类包,手工将其排除在外就可以了。

2.依赖冲突的解决

2.1两个基本原则:

1).短路优先原则

A->B->logback-1.0.jar
A->logback-1.1.jar

2).先声明先优先原则(先解析先引用)
与项目A pom中配置 引用坐标的顺序有关,如果依赖B在C前的话 就优先B,反之...

A->B->logback-1.0.jar
A->C->logback-1.1.jar

2.2 演示两个原则

1).创建三个maven工程

maven-01,maven-02,maven-03

2).三个工程依赖结构:

maven-01依赖 spring-test,maven-02,maven-03 (maven-02/03需要首先提交本地仓库,maven-01才能找到 ,可以参考寻找构件过程:1.3 仓库寻找构件过程) ;

maven-02依赖commons-logging-1.1.1;

maven-03工程依赖 commons-logging-1.1.3

3).看下myEclipse或者执行mvn dependency:tree 查看依赖树:

myeclispe:依赖树

4).冲突解决办法:

4.1 pom配置1:

Xml代码

1.    2.      org.springframework  3.      spring-test  4.      4.2.2.RELEASE  5.        13.    15.    16.    17.      com.sohu.train  18.      maven-02  19.      1.0-SNAPSHORT  20.    

短路优先原则:

maven-01->spring-test->spring-core->commons-loggings-1.2(依赖深度3)

maven-01->maven-02->commons-loggings-1.1.1(依赖深度2)

所以maven01工程依赖的commons-loggings-1.1.1

4.2 pom配置2:

Xml代码

1.    2.      org.springframework  3.      spring-test  4.      4.2.2.RELEASE  5.        6.        7.            8.              commons-logging  9.              commons-logging  10.            11.        12.    14.    15.    16.      com.sohu.train  17.      maven-03  18.      0.0.1-SNAPSHOT  19.    21.    22.    23.      com.sohu.train  24.      maven-02  25.      1.0-SNAPSHORT  26.    

先引用先优先的原则:

maven-01->spring-test->spring-core

maven-01->maven-02->commons-logging-1.1.1

maven-01->maven-03->commons-logging-1.1.3

如果pom先依赖maven-02则 依赖commons-logging-1.1.1 依赖;反之,如果pom先依赖maven-03则 依赖commons-loen

关于maven的依赖特性以及冲突解决是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

0