文档章节

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

yizhichao
 yizhichao
发布于 2017/04/05 13:01
字数 626
阅读 133
收藏 1
点赞 0
评论 0

现象

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


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

共有 人打赏支持
yizhichao

yizhichao

粉丝 13
博文 384
码字总数 286487
作品 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
weblogic部署tomcat项目时遇到的一些错误及解决方式

首先,先确定自己项目的WEB-INFO下有weblogic.xml,没有的话先加上。因为有不少问题是jar包冲突导致,因为没有设置优先使用项目自己的jar包,weblogic会使用它自己的jar包。所以要通过weblo...

一只石头
2016/06/20
791
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) 数据来自于服务器和数据库, 可能出现FC问题 日志: java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sur......

胡文城
2014/05/10
0
0
用dependency:tree查看maven引入jar包的传递依赖

maven项目的pom.xml文件给项目导入了不同的jar包,有时候不同的dependency会引入同一个jar包的不同版本。 当不同版本的jar包被依赖后,可能会出现: 冲突。 有的版本的jar包不会被classload...

哲别0
2017/10/26
0
0
让Tomcat7识别War包的Class-Path(MANIFEST.MF)属性动态加载类路径

一、背景 几个Web项目需要打包到一个发布包中,问题是War包都各自包含了自己的WEB-INF/lib,其中不少依赖Jar有重复。所以希望把War包的所有的lib都放到外部的一个公共目录减小总工程大小。但...

NoahX
2013/11/01
0
0
关于Jar包的管理,你有什么想说的吗

对于做Java的同学而言,应用依赖的那一众的Jar如何管理是个大难题,像我们的很多应用动不动就依赖上百个Jar,这些Jar的冲突问题很容易 导致各种奇怪现象,例如有些机器是OK的,有些机器却报N...

大风厂蔡成功
2014/02/12
1K
2
linux环境下Jboss服务启动日志目录发生变化

最近服务器(linux环境)日志出现异常,经过反复查找,问题得到解决; 由于出现故障的应用记录日志采用的是./log/xxxx.log方式,启动服务路径不同,日志生成目录会不同。 以下是解决问题的步骤...

Shawn_Cheung
2014/05/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

iOS安全应该做哪些事情

1. 尽量使用HTTPS协议。 2. 密码提交的时候,密码使用SHA256加密后传输,MD5等经过哈希碰撞已经可以推算出原文。 3. 密码提交的时候,可以加盐。 4. 密码保存在本地的时候,尽量使用钥匙串保...

HOrange
8分钟前
0
0
react native 注意事项

1. 环境参考官网 android studio 必装 java jdk安装 1.8版本(环境建议自己一步一步配置,切记不要 apt ) 2.有改变编译内容发现 会白屏,然后APP消失,请卸载原来的测试 appinfo (连续两次...

304158
14分钟前
0
0
FOMO游戏代码解析

源代码在此处

怎当她临去时秋波那一转
19分钟前
1
0
EOS智能合约与DApp开发入门

EOS的是Block.One主导研发的一个区块链底层公链系统,它专门为支撑商业去中心化 应用(Decentralized Application)而设计,其代码开源。 比特币被称为区块链1.0,因为它开辟了数字加密货币的...

笔阁
32分钟前
1
0
编译cjson到dll

https://blog.csdn.net/mengzhisuoliu/article/details/52203724 编译完成后 是纯lua实现的json decode 的10倍以上...

梦想游戏人
42分钟前
0
0
JS基础- Date 对象

Date 对象 Date 对象用于处理日期和时间。 创建 Date 对象的语法: var myDate=new Date() 注释:Date 对象会自动把当前日期和时间保存为其初始值。 Date 对象属性 属性 描述 constructor 返...

ZHAO_JH
44分钟前
0
0
Python数据分析numpy(1)

Python开源的科学计算基础库 1.表示N维数组对象ndarray 2.线性代数、傅里叶变换、随机数生成 3.广播函数,整合c++、c 一.数据的维度 1.数据 2.数据维度 3.一维数据 (1)特点 (2)Python中的...

十年磨一剑3344
46分钟前
1
0
csv导入Hive脚本

from pyspark.sql import HiveContexthivec = HiveContext(sc) # 创建一个hivecontext对象用于写执行SQL,sc为sparkcontext# 拼接一个字段类型字符串str_s = 'label String,'...

gulf
49分钟前
0
0
TensorFlow 隐含层 拟合 异或运算

a⊕b = (¬a ∧ b) ∨ (a ∧¬b) 数据 X = [[0, 0], [0, 1], [1, 0], [1, 1]]Y = [[0], [1], [1], [0]] 单层网络只能拟合线性问题,由于异或是非线性问题,需要使用多层网络 输入和输出 [[...

阿豪boy
今天
0
0
SVN 教程

http://www.runoob.com/svn/svn-tutorial.html 记一次 svn 管理的项目迁移工作 之前A服务器上的项目版本管理工具是用的SVN,后来,之前管理linux服务器的员工离职了,这管理服务器的工作也就...

yeahlife
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部