当前位置:   article > 正文

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

was应用jar包冲突

现象

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

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

后记

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/590657
推荐阅读
相关标签
  

闽ICP备14008679号