文档章节

maven的pom.xml用<exclusion>解决版本问题

JAVA码猿
 JAVA码猿
发布于 09/20 07:21
字数 596
阅读 13
收藏 2

maven管理库依赖,有个好处就是连同库的依赖的全部jar文件一起下载,免去手工添加的麻烦,但同时也带来了同一个jar会被下载了不同版本的问题,好在pom的配置里面允许用<exclusion>来排除一些不需要同时下载的依赖jar 。

导致jar包冲突的原因

1、mvn的传递依赖特性:mvn编译打包除了会引入直接申明的依赖,还会引入间接申明的依赖

 

2、mvn的依赖仲裁规则:

    1). 按照项目总控POM的DependencyManager版本声明进行仲裁。

    2). 如无仲裁声明,则按照依赖最短路径确定版本。

    3). 若相同路径,有严格区间限定的版本优先。

    4). 若相同路径,无版本区间,则按照先入为主原则。

 

3、依赖的scope会影响依赖的影响范围。

 

 

简单冲突解决的三途径!

 

1、根据报错的class名或方法名定位到可能导致冲突的jar包,jar包冲突引入有几种情况:

    1).  引入了这个jar包的多个版本,而mvn仲裁的时候取了错误的版本,这个版本本身就缺少正确的class或方法。

    2).  引入了不同坐标但是具有同名class的多个jar,mvn加载class的顺序差异会导致加载到错误的class。

2、通过mvn dependency:tree  >  tree.txt 导出全部的依赖。 可以使用 -Dverbose 、-Dincludes或者-Dexcludes参

数来精确定位导致冲突的jar包。 

3、找到需要排除的依赖jar包,通过mvn仲裁优先的方法定义正确的jar包,或者通过exclusion的方式排除错误的jar包。

4.温馨提示:另外在项目开发中jar尽量按需引入,系统管理起来,别什么都不管直接加包进来,这样也可以在一定程度上减少jar

包冲突的风险。

© 著作权归作者所有

共有 人打赏支持
上一篇: lombok
下一篇: sql优化总结
JAVA码猿
粉丝 9
博文 62
码字总数 45401
作品 0
海淀
程序员
私信 提问
org.apache.zookeeper.ZooKeeper.(Z)V

异常:org.apache.zookeeper.ZooKeeper.<init>(Ljava/lang/String;ILorg/apache/zookeeper/Watcher;Z)V 原因:有不同版本的zookeeper的jar包引入所致 解决:在pom.xml中添加 <exclusions> <......

哈利路亚秋秋
07/24
0
0
maven 加入json-lib.jar 报错 Missing artifact net.sf.js

pom.xml 内容: [html] view plaincopy <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> </dependency> 报错误:Missing artif......

Zero零_度
2015/09/24
407
0
Maven类包冲突终极解决小技若干

引用 如果你爱他,就请让他用Maven,因为那里是天堂,如果你恨他,就请让他用Maven,因为那里是地狱. Maven对于新手来说是《步步惊心》,因为它包罗万象,博大精深,因为当你初来乍到时,你就...

stamen
2015/08/19
0
0
用dependency:tree查看maven引入jar包的传递依赖

maven项目的pom.xml文件给项目导入了不同的jar包,有时候不同的dependency会引入同一个jar包的不同版本。 当不同版本的jar包被依赖后,可能会出现: 冲突。 有的版本的jar包不会被classload...

哲别0
2017/10/26
0
0
pom.xml中各个标签 的意思

Maven 构件工程的属性文件 pom.xml文件(实践用): <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="htt......

happycode
2014/03/04
0
2

没有更多内容

加载失败,请刷新页面

加载更多

我的Linux系统九阴真经

我的Linux系统九阴真经 在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了。各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行...

linuxCool
52分钟前
15
0
Python程序员需要知道的30个技巧

1 直接交换两个数字位置 1x, y = 10, 202print(x, y)3x, y = y, x4print(x, y)5#1 (10, 20)6#2 (20, 10) 2 比较运算符的链接 1n = 102result = 1 < n < 203print(result)4# True5result = 1 ......

糖宝lsh
52分钟前
10
0
[LintCode] Linked List Cycle(带环链表)

描述 给定一个链表,判断它是否有环。 样例 给出 -21->10->4->5, tail connects to node index 1,返回 true。 这里解释下,题目的意思,在英文原题中,tail connects to node index 1 表示的...

honeymose
今天
10
0
Android :报错Your project path contains non-ASCII characters.

报错内容如下 Your project path contains non-ASCII characters. This will most likely cause the build to fail on Windows. Please move your project to a different directory. See ht......

lanyu96
今天
7
0
Nginx平滑添加模块

Nginx已经编译安装并运行了一段时间, 然后某一天, 发现需要用到某个模块但当初没有编译, 这个时候怎么办呢? 卸载重新安装肯定可以的, 如果Nginx版本没有变更的话, 则有一个相对平滑的方法来添...

老菜鸟0217
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部