关于maven包冲突的一些思路
在最近的项目中出现了很多包冲突,有时一下子就能猜到错误,但是有写往往需要很久都不能定位问题,尤其是项目人员参差不齐,有时为了方便私自引入一些工具类,而未考虑到项目本身。
maven的出现方便了我们的包导入,引用但是maven引入的jar包往往也引入了其余的jar包,而这往往是包冲突最隐蔽的地方,尤其是对引入的包结构不熟悉,十分难分析到问题的原因。
包冲突的迹象:
1.运行了很久的代码,突然间就报错了,而在最近的代码中又完全没有涉及到该代码的改动,或者不定时异常。
现象:a.出现方法找不到.(xxxx not found)b.类错误(xxx.xx.xx.xx.aa)报错
a.方法:找到报错的代码,删除代码中运来的引用(因为本地代码引用的jar地址往往很具体),再次引用,看会不会出现完全相同的类(包括包路径)(有些jar,也是像你一样的开发人员封装的,命名及其不规范简单),或者直接项目全局查找类名(当然类似idea,这些能查找jar包中包含的类),如果有再对比。
b.类:往往会把类的包名和类名,打印出来,但是你会发现这个包的类在这个时间段或者调用时时不会引用的 ,但是为什么还是报错了呢。也往往是在不同的jar包中包含了相同的类名(包路径相同)
c.引用的jar包又用pom依赖引用了第三方的jar包,而凑巧这个jar包在你引用的maven仓库中又能找到(虽然没用),maven就会在此jar包时加载引用的jar包,但是你本地有引用了另一版本的jar包,好那么jar包冲突的问题就来了。so,找到那个你不知道哪来的jar包,找到其本地仓库中该jar的pom依赖树,用maven的exlusion去除依赖。如果是某一个class的话另一个思路就是在启动脚本中指定该jar的加载顺序。
根源:我们打包编译完成后,jvm虚拟机运行时往往是去我们打的包中找引用的类,先找到那个就是哪个,所以就出现调用错误的问题。
2.本地运行完全没问题,但是一到测试,生产环境就报错。
声明:不一定是包冲突,更可能的情况是和环境有关。但可以考虑包冲突的问题。
方法:a.直接远程调试,但是很多环境都不支持。b.把报down下来,按照方法冲突的思路去找,然后对比包中是否有冗余导致冲突的jar包
但是总体还是的学会看错误日志,从错误日志反推找结果。
自动依赖maven的打包工具,如jekins:
私有库对于稳定版版本号jar包不同一般都不会有问题,有问题的是需要不断更新的snapshot的jar包。
依赖了maven的工具,那么该环境本地也有一个自己私有的maven库,在我们通过jar包相互调用的多系统依赖中,对于需要不断更新jar包的环境(往往是snapshot jar包),往往有一个问题就是构建工具本地私有的仓库,但是快照jar包,往往没及时更新,即使中央仓库早已更新完毕,虽然maven有一个snapshot的检测机制,但是往往都出了问题,如不手动设置,只是默认安装。这样就需要删除本地仓库的jar包,然后再次导入。我的maven仓库有问题么???求指教。。。。。
^_^热爱文字,展现内心的安宁,和思维的力量。
关于maven包冲突的一些思路的更多相关文章
- IDEAL葵花宝典:java代码开发规范插件 (maven helper)解决maven 包冲突的问题
小编说到: 在我们日常开发当中常常我们会遇到JAR包冲突.找来找去还找不到很是烦人.那么所谓的JAR包冲突是指的什么那?JAR包冲突就是-引入的同一个JAR包却有好几个版本. 例如: 项目中引用了两个 ...
- idea 中解决maven 包冲突的问题(maven helper)
转:链接 一.冲突问题 比如项目中引用了两个 fastjson.jar的版本,分别为 fastjson:1.2.28fastjson:1.2.3 我们用到了1.2.28中的某个类, 比如 A类,在版本 ...
- maven依赖包冲突解决思路
1.显示依赖关系mvn dependency:tree > tree.txt显示所有依赖关系,并输出到text.txtmvn dependency:tree -Dverbose > tre ...
- 重新看待Jar包冲突问题及解决方案
Jar包冲突是老生常谈的问题,几乎每一个Java程序猿都不可避免地遇到过,并且也都能想到通常的原因一般是同一个Jar包由于maven传递依赖等原因被引进了多个不同的版本而导致,可采用依赖排除.依赖管理 ...
- 正确配置jstl的maven依赖,jar包冲突的问题终于解决啦
困扰了两天的问题,非常头疼,今天终于有了解决思路了,说到底,还是对maven不够了解吧.总是抱怨maven不好用,出现各种无厘头的问题,原来这些都是归于对它不够了解不够熟悉,它提供了很好的解决思路,只 ...
- Maven类包冲突终极解决方案
本文转自:http://ian.wang/106.htm 举例A依赖于B及C,而B又依赖于X.Y,而C依赖于X.M,则A除引B及C的依赖包下,还会引入X,Y,M的依赖包(一般情况下了,Maven可通过 ...
- Maven 解决JAR包冲突
在JAR 冲突的情况下, 利用Eclipse方式解决JAR包冲突时比较方便简洁的,步骤如下 1. 在Eclipse 中打开pom.xml , 选择 “Dependency Hierarchy” 2 ...
- 一点解决版本冲突的应急思路、怎样在所有jar包文件中搜索冲突的方法?
maven是一个很好的项目管理工具,你可以轻松的定义一个引用,从而达到使用别人写好的库的作用.且maven可以轻松地和jenkins配合,从而使打包部署变得更容易. 但是也因为这样,我们变得更傻瓜了, ...
- maven隐式依赖引起的包冲突
包冲突 使用maven管理项目时可能会遇到包冲突的情况比如:log4j-over-slf4j.jar 和 slf4j-log4j12.jar这两个包同时一起运行时就会有问题. 这种冲突可能是显式依赖导 ...
随机推荐
- 01 Servlet & Jsp 技术概述
Servlet 介绍 servlet 是运行在web服务器或应用服务器上的java程序, 它是一个中间层, 负责连接来自web浏览器或其他http客户端的请求和HTTP服务器上的数据库或应用程序. 为 ...
- textarea去掉边框
<textarea style="BORDER-BOTTOM: 0px solid; BORDER-LEFT: 0px solid; BORDER-RIGHT: 0px solid; ...
- C#从Excel中读取数据为空
将HDR设置为YES,IMEX设置为1即可. OleDbConnection objConn = new OleDbConnection("Provider=Microsoft.ACE.OL ...
- VS2013远程调试IIS中的网站
问题描述一般网站发布到远程iis中了.我们就无法调试了... 今天查到个可以远程调试iis或winform的方法: 记录下 第一步:copy 本地 C:\Program Files (x86)\Mic ...
- Attribute在.net编程中的应用(一)
Attribute的基本概念 经常有朋友问,Attribute是什么?它有什么用?好像没有这个东东程序也能运行.实际上在.Net中,Attribute是一个非常重要的组成部分,为了帮助大家理解和掌握A ...
- UML学习目录
用例图:http://www.cnblogs.com/yjjm/archive/2012/01/28/2385861.html http://kb.cnblogs.com/page/129491/
- dropload 使用表
移动端下拉刷新.上拉加载更多插件 依赖 (dependence) Zepto 或者 jQuery 1.7以上版本,推荐jQuery 2.x版本(二者不要同时引用) Zepto or jQuery 1. ...
- trait优先级 与 使用
之前一直沒有讲到trait,在此我不得不提一下trait中的优先级: 在trait继承中,优先顺序依次是:来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法. For e ...
- Import error: no module named cv2 错误解决方法
Windows: 将opencv安装目录下的cv2.pyd拷贝到Python安装目录里Lib中site-packages Linux: (1)将opencv安装目录下的cv2.so拷贝到Python安 ...
- [MongoDB]学习笔记--User管理
1. 创建一个超级用户 use admin db.createUser( { user: "adminUserName", pwd: "userPassword" ...