如何在
was
中解决
jar
包冲突
大型的基于
WebSphere
的项目开发中,同一个
WebSphere Application Server
(以下
简称
WAS
)
上会部署多个应用程序,
而这多个应用程序必然会共用一些
jar
包,包括第三
方提供的工具和项目内部的公共
jar
等。把这些共用的
jar
包提取出来在多个应用程序之
间共享,不仅可以统一对这些
jar
包进行维护,同时也提高了
WAS
的性能。但是随着应
用的不断扩大,新的应用程序的不断增加,新的应用程序会希望使用一些更高版本的共享
jar
包,而由于系统运行维护的需要,老的应用程序仍然希望用老版本的共享
jar
包,这样
就必然造成了共享
jar
包的版本冲突。
jar
包版本冲突问题是在大型应用项目的开发中经常
遇到的问题,
本文试图从
WebSphere
的类加载器入手,
讨论几种在不同情况下解决
jar
包
冲突问题的办法。
WebSphere
中类加载器介绍
Jar
包冲突实际上是应用程序运行时不能找到真正所需要的类,
而影响类的查找和加载的是
JVM
以及
WebSphere
中的类加载器(
class loader
),为此,我们首先介绍一下
WebSphere
中的类加载器以及一些相关的概念。
WebSphere
中类加载器层次结构
Java
应用程序运行时,在
class
执行和被访问之前,它必须通过类加载器加载使之有效,
类加载器是
JVM
代码的一部分,负责在
JVM
虚拟机中查找和加载所有的
Java
类和本
地的
lib
库。类加载器的不同配置影响到应用程序部署到应用程序服务器上运行时的行为。
JVM
和
WebSphere
应用程序服务器提供了多种不同的类加载器配置,
形成一个具有父
子关系的分层结构。
WebSphere
中类加载器的层次结构图
1
所示:
图
1
:
WebSphere
中类加载器的层次结构