`
suifeng
  • 浏览: 174944 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

解决服务器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包冲突就此方法解决.
附件
class来源那个jar包的jsp 下载路径: http://pan.baidu.com/share/link?shareid=1635172140&uk=1963494373


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

分享到:
评论

相关推荐

    JDBC连接数据库所需jar包

    java采用JDBC方式连接数据库所需要的jar包,因为不同版本之间的jar包同时使用会产生冲突,...当包冲突时,程序不会报错,但是连接数据库时,会报connection refused error,可根据服务器oralce版本,删掉不必要的jar包

    jstl1.1.jar和standard1.1.jar

    解决方法:将javaee.jar包再copy一份放在tomcat目录的common\lib下 如上完成后即解决了该异常,大以为大功告成,没想到又出现了新异常 错误信息:java.lang.NoSuchMethodError: javax.servlet.JSP.PageContext....

    javamail邮件开发.rar

    javamail邮件开发.rar中包含apache-james-3.0-beta4-app服务器程序包和用于解决jdk7以上jar包冲突的jar包jaxb-impl-2.1.3.jar。开源工具commons-email-1.4.jar(这个其实也没什么用,因为使用maven添加依赖会自动...

    基于SpringBoot开发的自媒体社区平台源码+数据库

    另外在原本的Spring中由于随着项目的扩大导入的jar包数量越来越大,随之出现了jar包版本之间的兼容性问题,而此时SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性问题得到了很好的解决。...

    学生信息管理系统(附带数据库.sql+PPT)

    用eclipse工具+所学的ssh框架开发的基本的学生信息管理系统+未使用maven, 拥有整套sshjar包,避免学习中遇到jar包冲突或者错误的问题。 服务器为Tomcat,jdk为1.8.可以自己更改版本。欢迎大家学习交流。

    修复struts2的安全漏洞(编号S2-045、S2-046)

    给还用struts2框架的系统提供一个完美的解决方案,里面的struts2版本jar都统一好,大家在用的时候直接将对应的jar先删除,然后用这里面的jar包。必免jar冲突了

    解决 tomcat9 在Ubuntu 安装下 访问tomcat 首页 java.lang.ClassNotFoundException: org.apache.jsp.index_jsp 错误

    背景 ...在网上找了很多 都是说项目本身jar包和tomcatjar包冲突的问题,关键是我访问的是Tomcat自带的首页项目,根本没有自己部署过项目。根据一些经验和网上查找到的资料,可能是由于Tomcat的权限问

    JavaClash:开源Java 15部落战争13.0.4服务器

    Java冲突 开源Java 15 Clans of Clans服务器版本13! 需要帮忙? 加入我的或Vitalik的 如何开始 要求: 下一步,您需要编译服务器或使用预构建的jar。 要运行服务器,请使用以下命令: java -jar JClash.jar 怎么...

    Java系统部署文档-windows-V1.0.1.doc

    可以将Java应用程序打包成标准的WAR或JAR文件,并在服务器上部署和启动。 配置服务器:根据应用程序要求,进行服务器的相关配置,例如设置Web服务器、数据库、网络连接、权限管理、域名解析等。 启动应用程序:...

    html5 支持的websocket小案例源代码

    该rar包中的两个jar包是驱动包,此websocket必须在支持的服务器中运行,截至目前,tomcat 7支持的。如果你要跑程序时,必须把jar包去掉。不然会冲突,导致报错

    nginx网页配置工具nginxWebUI是一款可以使用网页来快速配置与管理nginx集群的nginx辅助工具.rar

    将nginx与nginxWebUI集成到一个docker镜像中,完美的打造一个拥有图形界面的nginx运行包,不与服务器上其他程序冲突。 数据导入导出 可将全站数据导出到一个文件当中,方便程序移植与重新部署。

    Weblogic配置手顺(JMS).xlsx

    JMS的配置顺序: 一.配置连接工厂; 二.配置消息存储; 三.配置JMS服务器; 四.配置消息目的地

    spring-initializr.zip

    要开始一个基于Spring或SpringBoot的新项目,可以使用在线工具:https://start.spring.io/使用它,可以很容易地创建基于Maven或Gradle的...java -jar start-site.jar 注1:端口号已改成5050,避免与其它常用端口号冲突

    kstuencis:从头开始的实时基于刻度的服务器,用于学习

    有两种方法可以使用Intellij IDEA或Gradle: ./gradlew build java -jar build/libs/kstuencis-all.jar 不要使用./gradlew run因为它没有控制台并且会引发连续错误。 如何使用 该项目有一个控制台实现来处理输入和...

    java8源码-private-cloud-storage:一个简单实用的云存储服务器

    可以脱离Tomcat环境,直接打包为Jar包,使用Maven的Package命令即可 功能介绍 文件上传、下载:支持文件的上传下载,上传时通过文件内容MD5来防止重复源文件占用服务器空间。用户的文件列表仅保存索引项。 文件的...

    JCO 与BC兼容的包(SAP/JAVA)

    当同一台服务器(WINDOWS2003)上同时装有BC和需要用JCO的JAVA应用时,sapjco.jar及librfc32.dll,sapjcorfc.dll版本应一致,否则将发生冲突.

    Java开发技术大全 电子版

    4.14.4JDK中的常用包195 4.15本章小结196 第3篇Java数据处理 第5章数组与字符串200 5.1数组200 5.1.1一维数组的声明200 5.1.2一维数组的创建201 5.1.3一维数组的使用202 5.1.4二维数组的声明204 5.1.5二维...

    JAVA 开发环境 Java SE Development Kit (JDK) 16.0.1 x64.zip

    除了这些工具之外,JDK 还提供了注释处理工具,用于 JAR 文件冲突检测的 extcheck,Java 编译器的 idlj IDL,使用源代码注释的 javadoc 文档生成器或 Javadoc 文档生成器。 jar`归档程序,将单个 JAR 文件中的相关类...

    JAVA 开发环境 Java SE Development Kit (JDK) 16.0.1 x64 免费下载.zip

    除了这些工具之外,JDK 还提供了注释处理工具,用于 JAR 文件冲突检测的 extcheck,Java 编译器的 idlj IDL,使用源代码注释的 javadoc 文档生成器或 Javadoc 文档生成器。 jar`归档程序,将单个 JAR 文件中的相关类...

Global site tag (gtag.js) - Google Analytics