一.引言 "老婆"和"妈妈"同时掉进水里,先救谁? 常言道:编码五分钟,解冲突两小时.作为Java开发来说,第一眼见到ClassNotFoundException.NoSuchMethodException这些异常来说,第一反应就是排包.经过一通常规和非常规操作以后,往往会找到同一个Jar包引入了多个不同的版本,这时候一般排除掉低版本.保留高版本就可以了,这是因为一般Jar包都是向下兼容的.但是,如果出现版本不兼容的情况的时候,就会陷入"老婆和妈同时掉进水…
原来用过eclipse的都知道,想要升级maven工程的jar包版本或者解决jar包冲突,直接在pom文件下的dependency hierarchy视图下右击冲突的jar包,将其exclude掉,然后在pom文件的dependencies视图下点击add按钮,然后添加自己需要的jar包即可.在公司用的是idea,还不是很熟悉,摸索之下在maven窗口中点击show dependencies出现jar包的依赖关系图,如下图所示:                                  …
前言 大家在项目中肯定有碰到过Maven的Jar包冲突问题,经常出现的场景为: 本地运行报NoSuchMethodError,ClassNotFoundException.明明在依赖里有这个Jar包啊.怎么运行不了!? 项目中明明定义着某个jar包版本为2.0.2,怎么打包之后变成2.5.0了!? A项目引xxx.jar包运行好好的,B项目同样引入xxx.jar后,运行报错了..是B项目有问题,还是xxx.jar包有问题!? 本地环境和测试环境运行的好好的,到了生产就报一堆NoSuchMetho…
背景 大一点的公司,可能有一些组,专门做中间件的:假设,某中间件小组,给你提供了一个jar包,你需要集成到你的应用里.假设,它依赖了一个日期类,版本是v1:我们应用也依赖了同名的一个日期类,版本是v2. 两个版本的日期类,方法逻辑的实现,有一些差异. 举个例子,中间件提供的jar包中,依赖如下工具包: <dependency> <groupId>com.example</groupId> <artifactId>common-v1</artifactI…
Java SE 9 多版本兼容 JAR 包示例 作者:Grey 原文地址:Java SE 9 多版本兼容 JAR 包示例 说明 Java 9 版本中增强了Jar 包多版本字节码文件格式支持,也就是说在同一个 Jar 包中我们可以包含多个 Java 版本的 class 文件,这样就能做到 Jar 包升级到新的 Java 版本时不用强迫使用方为了使用新 Jar 包而升级自己的业务模块 Java 版本,也不用针对不同最低支持 Java 版本提供不同的 Jar,真正的做到了一个 Jar 包兼容所有的目的…
jar包依赖冲突,版本不兼容会导致各种各样的问题.这里推荐一款sbt插件用于查找项目中的jar包依赖关系,通过该插件可以轻松的看出某个jar包依赖哪些jar,以及某个jar被哪些jar所依赖.此外该插件还可生成可视化图形用于查看依赖关系. 插件地址:https://github.com/jrudolph/sbt-dependency-graph 引用方式: addSbtPlugin("net.virtual-void" % "sbt-dependency-graph"…
来自:http://liuwei1578.blog.163.com/blog/static/49580364200991572642653/ Jar包冲突问题是在大型Java软件开发中经常遇到的问题,系统开发人员经常会为解决类似的问题耗费大量的时间进行调试和测试,本文根据各种际情况,结合WebSphere中类加载器,讨论了几种解决jar包冲突问题的办法,并给出了具体实现的步骤及源代码.读者定位为具有Java和WebSphere开发经验的开发人员.读者可以学习到在WebSphere中类加载器的定义…
搭了个spring+struts2+mybatis的项目架子, 好久不用myEclipse和tomcat了,生疏了好多. 建议还是去百度一些框架整合的博客,直接使用博客里面给的jar包列表里的jar包,自己随意搭太痛苦了,总是jar包冲突, 而且就算百度,度娘也什么用, 百度前人的经验,告诉我说:这时候你需要谷歌或bing,我试了试,不知道是不是我笨,没领会要领(欲哭无泪·····). but! 你有张良计,我有过墙梯. 我发现百度(或者bing,或者google)如下内容: 搜索      …
为什么项目的jar包会和tomcat的jar包冲突? 碰到这个问题,猜测tomcat启动时会将自己的lib和项目的lib在逻辑上归并为一个大的lib,但是并没有做版本区分以及去重,这样相同的包可能就有两个引用,启动时自然就不知道用哪个包了,从而引发冲突.纯属猜测,等研究了tomcat的加载过程之后再补充更正.之前下载的How Tomcat Works.pdf还没来得及看,应该能解答所有问题,纯英文版的. 一下是tomcat\lib下的包,框出来的是容易不小心二次引入的包,注意下就好了. 补充:…
前言 在我之前使用Gradle的博文中已经提到,Gradle对依赖的管理是比较智能的,如果有两个包依赖于相同的包,而版本不同的时候,Gradle会进行自动的选择,从而避免jar包的冲突. 也就是说,在理论上使用Gradle一般情况下,不会出现jar包冲突,那么为什么会有今天这篇博文呢? Gradle可以帮你管理的是版本不同但是包相同的依赖.但是如果两个原本就不同的依赖之间互相发生冲突,这样的冲突Gradle就不能自动帮你完成了,因为它也不知道你需要哪一个. 问题描述 我这边以我出现的冲突为例:…