在最近的项目中出现了很多包冲突,有时一下子就能猜到错误,但是有写往往需要很久都不能定位问题,尤其是项目人员参差不齐,有时为了方便私自引入一些工具类,而未考虑到项目本身。

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包冲突的一些思路的更多相关文章

  1. IDEAL葵花宝典:java代码开发规范插件 (maven helper)解决maven 包冲突的问题

    小编说到: 在我们日常开发当中常常我们会遇到JAR包冲突.找来找去还找不到很是烦人.那么所谓的JAR包冲突是指的什么那?JAR包冲突就是-引入的同一个JAR包却有好几个版本. 例如: 项目中引用了两个 ...

  2. idea 中解决maven 包冲突的问题(maven helper)

    转:链接 一.冲突问题 比如项目中引用了两个 fastjson.jar的版本,分别为 fastjson:1.2.28fastjson:1.2.3 我们用到了1.2.28中的某个类, 比如 A类,在版本 ...

  3. maven依赖包冲突解决思路

    1.显示依赖关系mvn dependency:tree > tree.txt显示所有依赖关系,并输出到text.txtmvn dependency:tree -Dverbose > tre ...

  4. 重新看待Jar包冲突问题及解决方案

    Jar包冲突是老生常谈的问题,几乎每一个Java程序猿都不可避免地遇到过,并且也都能想到通常的原因一般是同一个Jar包由于maven传递依赖等原因被引进了多个不同的版本而导致,可采用依赖排除.依赖管理 ...

  5. 正确配置jstl的maven依赖,jar包冲突的问题终于解决啦

    困扰了两天的问题,非常头疼,今天终于有了解决思路了,说到底,还是对maven不够了解吧.总是抱怨maven不好用,出现各种无厘头的问题,原来这些都是归于对它不够了解不够熟悉,它提供了很好的解决思路,只 ...

  6. Maven类包冲突终极解决方案

    本文转自:http://ian.wang/106.htm 举例A依赖于B及C,而B又依赖于X.Y,而C依赖于X.M,则A除引B及C的依赖包下,还会引入X,Y,M的依赖包(一般情况下了,Maven可通过 ...

  7. Maven 解决JAR包冲突

    在JAR 冲突的情况下, 利用Eclipse方式解决JAR包冲突时比较方便简洁的,步骤如下 1. 在Eclipse 中打开pom.xml , 选择  “Dependency  Hierarchy” 2 ...

  8. 一点解决版本冲突的应急思路、怎样在所有jar包文件中搜索冲突的方法?

    maven是一个很好的项目管理工具,你可以轻松的定义一个引用,从而达到使用别人写好的库的作用.且maven可以轻松地和jenkins配合,从而使打包部署变得更容易. 但是也因为这样,我们变得更傻瓜了, ...

  9. maven隐式依赖引起的包冲突

    包冲突 使用maven管理项目时可能会遇到包冲突的情况比如:log4j-over-slf4j.jar 和 slf4j-log4j12.jar这两个包同时一起运行时就会有问题. 这种冲突可能是显式依赖导 ...

随机推荐

  1. CI cookie 存放数组

      #ci cookie 由于不能存放数组,所有必须序列化之后在存入数组中 #定义数组 $cookie_array=array( 'shop_id'=>$gid, 'shop_name'=> ...

  2. java collection 类图

    转载:http://visionsky.blog.51cto.com/733317/371809/

  3. MathType可以编辑物理公式吗

    很多的物理专业的人都在为编辑物理公式头疼,其实要写出这些公式并不难,要写出这些物理公式,那你就需要一个MathType公式编辑器!这是一款专业的公式编辑器,不管多复杂的公式或方程,都可以用它编辑出来, ...

  4. 计算机视觉中的边缘检测Edge Detection in Computer Vision

    计算机视觉中的边缘检测   边缘检测是计算机视觉中最重要的概念之一.这是一个很直观的概念,在一个图像上运行图像检测应该只输出边缘,与素描比较相似.我的目标不仅是清晰地解释边缘检测是怎样工作的,同时也提 ...

  5. hdu 4067(最小费用最大流)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4067 思路:很神奇的建图,参考大牛的: 如果人为添加t->s的边,那么图中所有顶点要满足的条件都 ...

  6. p​h​p​面​试​题​笔​试​题​ ​比较有用

    一.选择题1.php的源代码是 (A )A.开放的 B.封闭的 C.需购买的 D.完全不可见的2.php的输出语句是 ( C )A.out.print B.response.write C.echo ...

  7. ryu启动问题总结

    在Mininet中启动ryu控制器,首先切换到ryu中的app目录下: cd ryu/ryu/app 启动ryu: ryu-manager simple_switch.py 遇到了如下的错误提示: 这 ...

  8. 【BZOJ3166】[Heoi2013]Alo 可持久化Trie树+set

    [BZOJ3166][Heoi2013]Alo Description Welcome to ALO ( Arithmetic and Logistic Online).这是一个VR MMORPG , ...

  9. android sliding menu

    https://github.com/jfeinstein10/SlidingMenu/

  10. quartz定时任务配置

    参考:http://www.cnblogs.com/kay/archive/2007/11/02/947372.html Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quar ...