关于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这两个包同时一起运行时就会有问题. 这种冲突可能是显式依赖导 ...
随机推荐
- 第二百二十五节,jQuery EasyUI,PropertyGird(属性表格)组件
jQuery EasyUI,PropertyGird(属性表格)组件 学习要点: 1.加载方式 2.属性列表 3.方法列表 本节课重点了解 EasyUI 中 PropertyGird(属性表格)组件的 ...
- SQLite 连接两个字符串
SQLite中,连接字符串不是使用+,而是使用|| 示例: SELECT 'I''M '||'Chinese.' 将输出 I'M Chinese. 特别说明:1. SELECT 'I''M '+'Ch ...
- Git—怎样Windows操作系统中安装Git
介绍一下怎样在Windows操作系统中安装Git: 一.下载Git安装压缩文件:http://download.csdn.net/detail/wangshuxuncom/8035045 二.解压该压 ...
- Echoprint系列--编译
近期要做一个音乐相关的client.当中一个功能是音乐识别.搜索了一些资料选择Echoprint来开发.Echoprint是开源免费的,并且多种client都支持能节约非常多时间,今天主要下载和编译源 ...
- Eclipse虚拟内存不足【Eclipse中虚拟内存设置】
Eclipse最近在做J2EE项目中 发现老是出现虚拟内存不足的提示 前2天去加了根内存 问题同样存在 为了让我在写代码时 不在出现那讨厌的内存不足的提示 也为了 不让那破机器再卡住 今天找到了解决方 ...
- iOS 将金钱变为逗号形式
; NSNumberFormatter * formatter = [NSNumberFormatter new]; [formatter setNumberStyle:NSNumberFormatt ...
- iOS xcode6.0使用7.1运行程序 iphone5上下有黑条
转自:http://stackoverflow.com/questions/25817562/black-bars-appear-in-app-when-targeting-ios7-1-or-7-0 ...
- iOS 修改状态栏颜色
1.首先,苹果把UIViewControllerBasedStatusBarAppearance默认的值设为YES,是有他的道理的,新系统下,苹果希望我们的viewcontroller去控制statu ...
- c#读取excel到dataset
public DataSet TransExcelToDataSet(string fileName, List<string> sheetNames) { OleDbConnection ...
- Django - ModelForm组件
一.ModelForm组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,先来一个简单的例子来看一下这个东西怎么用:比如我们的数据库中有这样一张学生表, ...