让Tomcat7识别War包的Class-Path(MANIFEST.MF)属性动态加载类路径
一、背景 几个Web项目需要打包到一个发布包中,问题是War包都各自包含了自己的WEB-INF/lib,其中不少依赖Jar有重复。所以希望把War包的所有的lib都放到外部的一个公共目录减小总工程大小。但放在一个目录,以目录方式加载到全局Classpath就会产生类库冲突问题,如:web1使用spring2,web2使用spring3。 二、分析 一般Jar包中都包含一个META-INF/MANIFEST.MF文件。在这个配置文件中可以指定一个Class-Path属性,再执行java -jar xxx.jar时,Java会以这个Class-Path属性中定义为准。 War包中也有MANIFEST.MF文件,当然也可以添加Class-Path属性(Maven)。但问题是这个属性从Java规范上讲并没有约定,所以应用服务器一般都不识别。 我们需要解决的是类路径加载的问题。还好Tomcat上下文配置文件的Context标签中有Loader标签,允许我们重写WebappLoader。 三、开发 1、Tomcat应用上下文XML配置样例 在Tomcat应用上下文配置文件中,定义Web工程的Loader指定到自定义WebappLoader。 <?xml version="1.0" encoding="UTF-8"?> <Context docBase="${xxx.home}/apps/xxx