一、什么是jar冲突
java项目原依赖jar包版本被更改,出现类缺失、方法缺失或者方法功能变化导致项目编译期或运行时错误,这种情况我们就可以认定为出现了jar冲突。当error log出现java.lang.ClassNotFoundException 或者java.lang.NoSuchMethodError多半是jar冲突的表现。
二、冲突造成的影响
jar冲突表现出以下三种情况:
- 编译报错:发生在线下,会被开发同学及时发现,往往会将风险扼杀在摇篮;
- 运行时报错:jar冲突导致的运行时报错,一般是编译期没有加载到出错代码,当项目部署后运行期间动态加载、反射操作等会触发报错。这种情况多依赖测试阶段得以体现,如果冲突影响的范围面小或早期功能代码,没有完整的回归测试是很难在项目上线前被发现的;
- 方法接口功能不可用:这种情况最可怕,很可能连异常的日志都不打印,极难从排查,因为两个版本的类及方法签名完全一致,无论是编译还是运行期间都不会报错,非当前迭代功能点测试同学也很难测试到。线上出现问题后,开发同学也处于一头雾水状态,不知从何下手解决bug。个人认为最好的办法是根据bug发生的位置定位到调用链路,以方法级别为单位debug调试,缩小范围定位出有问题的方法,再替换原jar包版本观察比较,这样才能发现是jar冲突在作祟。
无论哪种情况都会然人头疼,后两种引发线上问题更为严重。
三、怎样引发的jar冲突
jar冲突会让我们引用的jar包版本不可控,很有可能因为maven的默认依赖原则引入了一个错误的版本,从而导致问题的发生。例如:
①②会造成编译报错、运行时报错,③会造成方法接口功能不可用。
四、冲突如何解决
jar冲突真实发生后可以采取以下步骤来解决:
1.使用当前线上版本pom文件,运行maven的mvn dependency:tree -Dverbose 指令查看当前jar包版本及位置
2.还原pom文件到上一次线上版本,运行maven的mvn dependency:tree -Dverbose 指令查看原始jar包版本及位置
3. 冲突jar包多是间接引入的
可以采取直接依赖原始版本
排除冲突版本,恢复原始版本
使用dependencyManagement声明版本为原始版本(推荐使用)
五、使用dependencyManagement(DM)声明版本避免冲突
DM管理的版本,不受间接引入版本的影响,固定在项目希望使用的版本,有了这个DM作保障,使得开发同学在需求扩展引入jar包时没有后顾之忧。使用DM提前管理jar包版本,项目整个生命周期都可以有效预防未知的冲突发生,降低线上事故,节约处理冲突成本和测试成本。在业界最常用的spring框架中可以在多级父pom中看到DM的身影,足以看出对DM的推崇。
Buy Amoxil Without Prescription https://cialibuy.com/ – cialis prescription Zithromax Penicillin buy cialis canada avis sur le cialis
Amoxicillin Allergies To obegreeRof https://bbuycialisss.com/# – Buy Cialis Altele compra generico viagra PafGrade Buy Cialis UnsoneeLetty Zithromax Adverse Effects
Effets Secondaires Cialis 20 Mg Wicmymmele https://ascialis.com/# – Cialis gaideleplete donde comprar viagra en espana affextop Cialis adoreakder Cialis Without A Doctor’S Prescription
Best Pharmacy To Buy Tadalafil Wicmymmele https://apcialisz.com/ – Cialis gaideleplete Cialis Dosis Maxima affextop Cialis adoreakder Tadalis Sx Soft Effet
Hello there! I know this is kinda off topic but I was wondering
which blog platform are you using for this site? I’m getting fed up of WordPress
because I’ve had problems with hackers and I’m
looking at alternatives for another platform.
I would be awesome if you could point me in the direction of a good platform.
Acheter Vrai Viagra Ligne En Bourges Wicmymmele cialis prices gaideleplete Can Cephalexin Affect Your Birth Control
https://fcialisj.com/ – cialis online
buy cialis 5mg online
Hmm it appears like your site ate my first comment (it was super long) so
I guess I’ll just sum it up what I wrote and say, I’m thoroughly enjoying your blog.
I too am an aspiring blog blogger but I’m still new to everything.
Do you have any recommendations for rookie blog writers?
I’d really appreciate it.