`
flyPig
  • 浏览: 139628 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Jar冲突解决一

    博客分类:
  • Java
 
阅读更多

目的是classpath中线性的jar排列扩展成树型排列。

方案原理
遍历classpath,对于每个jar定制一个ComponentClassLoader,每个jar内部的mainfest文件存储这个jar的依赖关系,由ManagerClassLoader负责根据依赖关系找到相应的ComponentClassLoader加载。如下是静态依赖关系:


 

ComponentClassLoader 继承自URLClassLoader,用于加载每个classpath中的jar,其parent Classloader是ManagerClassLoader.

ManagerClassLoader 继承于ClassLoader,当ComponentClassLoader在其对应的jar内无法加载时,委托给ManagerClassLoader,ManagerClassLoader会从其依赖列表里面去加载。

WarpperClassLoader 用于取代java默认的SystemClassLoader.


加载流程


启动注册
Classpath中的每个Jar对应一个ComponentClassLoader, 同时读取jar中的MAINFEST文件配置,加载Jar之间的依赖关系,并在ComponentClassLoader保存这个依赖列表。

加载规则
对于一个Class:
WarpperClassLoader自己加载,循环调用所有注册的ComponentClassLoader来加载.
ComponentClassLoader在自己所在的Jar中加载类,如果加载到就返回;如果没有加载到,则统一调用ManagerClassLoader从依赖列表类中加载。
如果ComponentClassLoader无法加载到则依次委托给extension,bootstrap加载。
备注 :Jar之间的依赖关系保存在Jar内部的META-INF/MAINFEST中,这个非常重要,依赖关系列表弄错就无法正确加载。

配置部署
将上面3个class打包成loader.jar,在启动参数中添加如下命令
-Xbootclasspath/a:lib/loader.jar -Djava.system.class.loader=com.conflict.WrapperClassLoader

 

  • 大小: 9.6 KB
  • 大小: 14.9 KB
分享到:
评论

相关推荐

    weblogic部署项目jar冲突解决

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

    osgi解决不同版本jar包冲突的demo

    5. **冲突解决**:在OSGi中,冲突解决是通过版本规则来完成的。如果多个bundle导出了同一个包,OSGi会根据版本号选择一个合适的版本加载。这可以通过配置bundle的依赖关系和版本策略来实现。 6. **测试**:在OSGi...

    jar包冲突检测工具.zip

    1. 提升代码稳定性:通过检测和解决冲突,确保每个类只使用一个版本,从而避免因不同版本类导致的运行时错误。 2. 优化项目依赖:减少不必要的jar包,精简项目体积,提高应用加载速度。 3. 提高开发效率:快速定位...

    解决网上应用厅部署在was上jar包冲突问题

    ### 解决网上应用厅部署在WAS上JAR包冲突问题 #### 背景介绍 在企业级应用开发与部署的过程中,经常会遇到各种技术挑战,其中之一就是在WebSphere Application Server (WAS) 上部署应用程序时遇到的JAR包冲突问题。...

    JSONObject所须个包 已解决jar冲突

    具体解决jar冲突的方法通常包括以下步骤: 1. **排除冲突的类**:正如描述中所述,可以直接删除"commons-beanutils-1.7.0.jar"中的`org/apache/commons/collections`目录及其下的所有class文件。这样可以避免与...

    解决jar包冲突的工具类jarjar-1.4.rar

    解决jar包冲突的工具类jarjar-1.4.rar,jar包冲突解决方法,解决jar与jar冲突,jar与aar冲突,不想删除任何一个包,只能修改其中一个jar包包名即可解决,解决方法详细请看这篇文章: ...

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

    在websphere8.5 下部署含有CXFwebservice的war包无法正常启动,...归根结底原因不是找不到类,而是发布后war下的jar与websphere自身平台下的jar冲突了,要解决此问题就要通过在websphere下建立共享库来根除,可参考附件

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

    1. **分析依赖**:使用Maven的`dependency:tree`命令或Gradle的`dependencies`任务,查看项目的完整依赖树,找出冲突的jar包。 2. **排除冲突**:在Maven的pom.xml或Gradle的build.gradle文件中,使用`exclusions`...

    easyExcel、poi,jar包版本冲突,jar包处理

    5、涉及到的jar冲突,取决于自己的项目 pom示例:项目中存在冲突再 exclusion 添加即可 <groupId>com.customize</groupId> <artifactId>easyexcel <version>2.2.6 <groupId>javax.servlet <artifactId>...

    检查jar包冲突

    5. **冲突解决策略**: - **优先级选择**:根据业务需求和库的重要程度设定优先级,选择保留某个版本的类。 - **代码重构**:如果冲突无法避免,可能需要对项目代码进行调整,避免使用冲突的类或方法。 6. **测试...

    关于Myeclipse使用mybatis出现Jar包冲突的解决办法

    本文将针对"关于Myeclipse使用mybatis出现Jar包冲突的解决办法"这一主题,详细解释如何解决这类问题。 首先,我们需要理解为什么会出现Jar包冲突。在MyEclipse中,可能由于内置的库或插件与我们手动引入的库之间...

    检测工具 jar包冲突

    6. **冲突解决策略**:有时,可能需要手动调整项目结构,创建自己的fat jar或Uber jar,将所有依赖合并为一个jar,以确保所有类都在同一环境中。 在具体操作中,`jarsTool`可能是一个用于检测jar包冲突的工具,它...

    ssh整合的jar冲突-解决

    因为Struts自带的antlr-2.7.2.jar,比Hibernate3.3自带的antlr-2.7.6.jar的版本要低,故要删除前一个低版本的,, struts1.3 和2.1都带有antlr-2.7.2.jar ,,,下面我要把它们都清除了,由于myeclipse 添加的struts性能...

    jar冲突问题解决方法记录

    在Java开发过程中,jar冲突是一个常见的问题,尤其是在大型项目或者依赖复杂的环境中。jar冲突通常指的是同一个类的不同版本出现在项目的类路径中,导致运行时出现问题。这种情况可能会引发各种异常,如`...

    jar包冲突检测工具

    在Java开发过程中,jar包冲突是一个常见的问题,尤其是在大型项目或者依赖复杂的系统中。jar包冲突指的是多个不同的jar包中包含相同类的情况,这可能导致运行时错误或不可预测的行为。"jar包冲突检测工具"正是为了...

    Maven解决jar冲突调试步骤

    ### Maven解决jar冲突调试步骤详解 #### 一、问题背景及理解 在使用Maven进行项目构建时,可能会遇到各种依赖冲突的问题。依赖冲突通常发生在多个不同版本的库被加载到同一个ClassPath中,导致某些类加载出现问题...

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

    在大型 Java 软件开发中,jar 包冲突问题是一个常见的问题,系统开发人员经常会为解决类似的问题耗费大量的时间进行调试和测试。为了解决这个问题,本文将从 WebSphere 中类加载器入手,讨论几种解决 jar 包冲突问题...

    com.googlecode.jarjar解决多版本依赖jar(需共存时的)冲突问题工具,修改包路径后的依赖将和冲突包彻底隔离开

    com.googlecode.jarjar, 解决多版本依赖jar(需共存时的)冲突问题,修改包路径后的依赖将和冲突包彻底隔离开

Global site tag (gtag.js) - Google Analytics