文档章节

解决服务器jar包冲突的4种方法

yizhichao
 yizhichao
发布于 2017/04/05 13:01
字数 626
阅读 134
收藏 1

现象

在开发测试时一切正常, 一旦部署到正式服务器上, 就会出现以下几类异常:


1, java类找不到 java.lang.ClassNotFoundException
2, 方法不存在 java.lang.NoSuchMethodError
3, 字段不存在 java.lang.NoSuchFieldError
4, 类错误 java.lang.LinkageError

原因
war包中jar包和服务器上jar包冲突, 由于现在服务器功能越来越强大, 而引入的jar也在不断增加, 
出现的冲突的可能性也越来越大, 而且正式环境复杂, 而且不能轻易修改服务器相关配置, 
为解决jar包冲突的问题带来困难, 如果去解决过这些问题, 那是相当折腾人的, 下面是一些方法的总结

根本 
这类冲突根本原因就是: 同一个java类存在多个jar包或类路径中, 而这大多由于使用了不同jar包版本造成.

方法

1, 案例法 
 使用服务器上已有应用的jar包(前提:服务器上面已经部署过别的应用), 曾经使用过此方法解决冲突

2, 最小化法 
正式环境有很多限制, 上传,部署,启停,测试这些过程越简单越好, 最近一次把war包中137jar删除只剩下14个jar包, 
整个测试验证周期大大缩短

3, 来源法 
如果能知道类加载于哪个jar包, 解决就比较容易, 在异常中会有出错类的完整类名, 
如果能获取此类加载于那个jar包, 就能确认冲突的jar包,
如何知道class加载于那个jar包, 昨天灵机一动想到了一个方法, 其实也很简单, 代码如下:

clazz.getResource("className.class").toString(); 

后面有一个jsp专门获取class加载于那个jsp包, 可供下载使用.

4, 服务器分析法
了解各种应用服务器的class加载机制, 就能判断是什么原因, 什么时候导致的冲突, 这样可以通过调整class加载顺序解决, 
最近一次WAS服务器上的jar包冲突就此方法解决.



附录
深入探讨 Java 类加载器 http://www.ibm.com/developerworks/cn/java/j-lo-classloader/ 
如何在 WebSphere 中解决 jar 包冲突 http://www.ibm.com/developerworks/cn/websphere/library/techarticles/haoaili/0512/
 

附件
class来源那个jar包的jsp 下载路径: http://pan.baidu.com/share/link?shareid=1635172140&uk=1963494373


后记
解决了一个问题,往往还有更大的问题,循环往复。

本文转载自:http://pipe-line.iteye.com/blog/1905251

共有 人打赏支持
上一篇: centos mysql
下一篇: tcpdump
yizhichao

yizhichao

粉丝 14
博文 452
码字总数 332886
作品 0
南京
程序员
私信 提问
一点解决版本冲突的应急思路、怎样在所有 jar 包文件中搜索冲突的方法?

原文出处:等你归去来 maven是一个很好的项目管理工具,你可以轻松的定义一个引用,从而达到使用别人写好的库的作用。且maven可以轻松地和jenkins配合,从而使打包部署变得更容易。 但是也因...

等你归去来
01/15
0
0
Tomcat报java.lang.VerifyError错误

调试网页时候发现报这个错误:java.lang.VerifyError错误。 google了下,看网友们的评述感觉是的jar包的问题,于是仔细检查自己的情况; 发现了个奇怪的地方,可能是自己不小心拖动了jar包导...

zhengguogaun
2013/06/19
0
0
maven的pom.xml用解决版本问题

maven管理库依赖,有个好处就是连同库的依赖的全部jar文件一起下载,免去手工添加的麻烦,但同时也带来了同一个jar会被下载了不同版本的问题,好在pom的配置里面允许用<exclusion>来排除一些...

JAVA码猿
09/20
0
0
微信公共平台开发者url/token 认证(springmvc3.2.4)

bae升级到3,所以转战到sae。在此,记录一下遇到的问题。 sae java环境, 1.jdk1.6,服务器jetty7.x 2.自己上传的项目里面的jar包不能跟sae上的冲突。 因为自己的项目是maven构建,用到了dom...

DemoDoc
2014/05/01
0
0
sqoop2基本架构、部署和个人使用感受

一、概述 随着公司集群升级到2.x,hadoop周边的一些工具也进行了版本的更新。这次主要说说sqoop2的升级和部署,其中sqoop1和sqoop2基本框架和用法发生翻天覆地的改变,其对版本的向下兼容做的...

zengzhaozheng
07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

区块链安全 - 以太坊短地址攻击

1 基础知识 EVM虚拟机在解析合约的字节码时,依赖的是ABI的定义,从而去识别各个字段位于字节码的什么地方。关于ABI,可以阅读这个文档: https://github.com/ethereum/wiki/wiki/Ethereum-C...

HiBlock
9分钟前
0
0
自定义函数及内部函数

变量的作用域 局部变量 global $Global及其他超全局数组 静态变量 仅初始化赋值 保留于内存直到response才销毁 global和static变量的区别 global:局部变量全局话 static:定义静态局部变量 函...

关元
10分钟前
0
0

中国龙-扬科
22分钟前
1
0
python包

https://www.lfd.uci.edu/~gohlke/pythonlibs/

陆朋
32分钟前
1
0
一文弄懂“分布式锁”,一直以来你的选择依据正确吗?

本文主要会关注的问题是“分布式锁”的问题。 多线程情况下对共享资源的操作需要加锁,避免数据被写乱,在分布式系统中,这个问题也是存在的,此时就需要一个分布式锁服务。 常见的分布式锁实...

Java干货分享
40分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部