文档章节

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

JAVA码猿
 JAVA码猿
发布于 09/20 07:21
字数 596
阅读 10
收藏 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

包冲突的风险。

© 著作权归作者所有

共有 人打赏支持
JAVA码猿
粉丝 10
博文 59
码字总数 43727
作品 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
maven 问题总结

转载自: http://tianya23.blog.51cto.com/1081650/289363 参考:http://tianya23.blog.51cto.com/1081650/364072 http://tianya23.blog.51cto.com/1081650/386891 maven安装配置:http://b2......

猴子也疯狂
2016/08/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

jenkins+docker+nodejs项目的自动部署环境

1、服务器安装docker yum install docker 2、jenkins安装 //创建jenkins工作目录mkdir -p /var/www/jenkins///拉取docker jenkins镜像docker pull jenkins //设置目前权限(必须...

西园里的猫
29分钟前
2
0
 索引和锁底层原理 !

索引和锁底层原理 ! 一、索引 在之前,我对索引有以下的认知: 索引可以加快数据库的检索速度; 表经常进行INSERT/UPDATE/DELETE操作就不要建立索引了,换言之:索引会降低插入、删除、修改...

DemonsI
38分钟前
3
0
转载:Java实现的SFTP

JSch - Java实现的SFTP(文件上传详解篇):https://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html JSch - Java实现的SFTP(文件下载详解篇):https://www.cnblogs.com/longyg/......

WJtiny
41分钟前
2
0
聊聊storm的AssignmentDistributionService

序 本文主要研究一下storm的AssignmentDistributionService AssignmentDistributionService storm-2.0.0/storm-server/src/main/java/org/apache/storm/nimbus/AssignmentDistributionServic......

go4it
43分钟前
3
0
完全跨域的单点登录(SSO)解决方案源码解析

本文介绍的是一种PHP的开源SSO解决方案,可完全跨域,实现较简洁,源码地址:https://github.com/legalthings/sso 实现原理 一共分为3个角色: Client - 用户的浏览器 Broker - 用户访问的网...

庞陆阳
43分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部