was服务器里面jar包_解决服务器jar包冲突的4种方法

现象

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

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包冲突就此方法解决.

后记

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值