`
suifeng
  • 浏览: 182052 次
  • 性别: 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


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

分享到:
评论

相关推荐

    weblogic部署项目jar冲突解决

    标题"weblogic部署项目jar冲突解决"指出的核心问题是JAR包冲突。这是因为不同的应用服务器可能内置了不同版本的库,或者在类加载机制上有差异,导致原本在Tomcat上运行良好的应用在WebLogic上出现问题。以下是一些...

    检查jar包冲突

    - **OSGi**:Open Service Gateway Initiative提供了一种动态的模块化系统,允许不同版本的类共存,从而解决了`jar`包冲突问题。 5. **冲突解决策略**: - **优先级选择**:根据业务需求和库的重要程度设定优先级...

    SSH整合jar包,彻底解决集成jar包冲突问题

    5. **合理组织类加载器**:在应用服务器如Tomcat中,可以通过调整类加载策略,比如使用`WEB-INF/classes`优先加载,避免不同模块重复引入的jar包产生冲突。 6. **使用jar包管理工具**:例如,使用FatJar或者One-Jar...

    如何在was中解决jar包冲突.pdf

    在解决 jar 包冲突问题时,我们可以使用以下几种方法: 1. 使用不同的类加载器来加载不同的 jar 包版本。这可以解决 jar 包版本冲突问题,因为不同的类加载器可以加载相同名字的类。 2. 使用共享库来共享 jar 包。...

    如何在WebSphere中解决jar包冲突.doc

    为了解决这个问题,本文将从 WebSphere 中类加载器入手,讨论几种解决 jar 包冲突问题的办法。 WebSphere 中类加载器的层次结构 在 WebSphere 中,类加载器的层次结构是一个自上而下的分层结构,最上层是系统的...

    websphere下部署CXF项目jar包冲突问题解决方式

    "websphere下部署CXF项目jar包冲突问题解决方式"这一主题聚焦于如何在IBM Websphere Application Server (WAS)中成功部署包含Apache CXF Web服务的WAR包,解决由于类加载导致的运行异常。 Apache CXF是一个流行的...

    asm.jar包冲突

    在实际开发中,解决jar包冲突的常见策略有以下几点: 1. **版本管理**:确保所有依赖项统一使用相同版本的ASM库,避免版本不兼容。如果不同模块需要不同版本,考虑使用Maven的`<dependencyManagement>`或Gradle的`...

    定位web开发中的jar包冲突

    本篇将深入探讨这个问题,以及如何通过理解ClassLoader的工作原理和使用相关工具来有效地解决jar包冲突。 首先,我们来了解什么是ClassLoader。在Java中,ClassLoader是负责加载类到JVM中的组件。当遇到多个相同类...

    myBaits所有jar包,包括log4j所需jar包,mysql所需jar包,导入后可以直接使用

    Maven是一个项目管理和综合工具,它可以帮助开发者构建、测试、部署和管理Java项目,通过依赖管理解决jar包冲突问题。 5. **commons-logging.jar**:Apache Commons Logging是Java的日志抽象层,它允许开发者选择在...

    myeclipse2014配置好的注解包,Jar包没有冲突

    解决Jar包冲突的方法通常有以下几种: 1. **排除冲突的库**:在项目的构建路径中,可以手动排除冲突的库或者指定特定版本的库。例如,如果两个库都包含了某个类,但版本不同,可以选择使用其中一个版本,并排除另一...

    dwr所需的jar包及配置

    为了使用这些文件,你需要将它们部署到你的Web应用服务器中,通常将jar包放入WEB-INF/lib目录,而web.xml和dwr.xml则放入WEB-INF下。然后,在你的HTML或JavaScript代码中引入engine.js和util.js,通过它们提供的API...

    邮件开发:javaee.jar mail.jar开发包与javaEE5.0冲突

    为了解决这个问题,有以下几种策略: 1. **版本控制**:确保使用与Java EE 5.0兼容的`mail.jar`版本。不同的JavaMail版本可能对Java EE的API有不同的支持,选择一个与当前环境兼容的版本可以避免冲突。 2. **类...

    SSM整合jar包

    SSM整合的3.2.13版本是一个稳定的版本,减少了可能出现的jar包冲突问题,使得开发者可以更专注于业务逻辑的实现,提高开发效率。这个版本可能包含了对之前版本的bug修复和性能优化,确保了项目的稳定运行。在实际...

    java开发jar包

    7. **JAR冲突** 当两个或更多JAR包包含相同类时,可能会发生版本冲突。Java类加载器会优先加载先找到的类,这可能导致程序运行异常。解决方法包括使用不同的类加载策略,或采用模块化系统(如Java 9及更高版本的...

    json使用jar包

    3. **使用Provided范围**:如果JSON处理是在服务器端完成,可以将相关jar包设置为`provided`范围,表示这些依赖由容器提供,避免打包到最终的WAR文件中。 4. **使用Struts2的JSON插件**:Struts2提供了JSON插件,...

    I-Jetty相关jar包

    在标题中提到的"I-Jetty相关jar包"指的是为了使I-Jetty能够正常运行,需要从官方或其他来源获取并添加的一系列依赖库。这些jar包包含了I-Jetty运行所需的组件和功能。 描述中提到"I-Jetty从官网下载下来以后不能...

    ssh不冲突jar包

    SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。..."ssh不冲突jar包"提供了一种便捷的解决方案,减少了开发者在解决依赖冲突上花费的时间,从而更专注于业务逻辑的实现。

    腾讯云短信服务jar包

    在这个“腾讯云短信服务jar包”中,主要包括了腾讯云短信服务的SDK(Software Development Kit),SDK封装了与腾讯云服务器交互的所有逻辑,包括网络请求、数据加密、错误处理等,使得开发者无需关注底层实现,只需...

    java 实用jar包 集合

    在实际使用时,开发者应根据项目需求选择合适的jar包,并注意版本兼容性,避免引入不必要的冲突。同时,随着技术的发展,新的库和框架不断涌现,开发者也需要持续学习和更新知识,以适应不断变化的技术环境。

Global site tag (gtag.js) - Google Analytics