原理说明
同一个类加载器对同一个类只加载一次,如果类加载器已经加载到这个类,再遇到相同的类文件,则进行忽略;利用这个特性,从而实现项目定制的Jar包中的类文件可以覆盖产品包中的类文件;
Tomcat7
Tomcat7对WEB-INF/lib下的jar加载顺序是按照jar包名称英文的顺序进行加载,项目定制的jar包名称英文顺序在产品的jar包前,就可以实现项目定制的jar包覆盖产品的jar包;
Tomcat8
Tomcat8对WEB-INF/lib下jar包加载顺序是随机的,这样就有可能无法优先加载项目定制的jar包,所以需要对项目定制的jar包设置优先加载,从而保证定制的包能够正常使用;
配置方式
如果需要让Tomcat8优先加载指定的jar包,需要进行以下配置 在tomcat目录下,conf/context.xml中的标签内增加以下配置
<Resources>
<PreResources className="org.apache.catalina.webresources.FileResourceSet"
base="jar包文件绝对路径"
webAppMount="jar包文件相对项目根目录路径" />
</Resources>
配置示例
<Resources>
<PreResources className="org.apache.catalina.webresources.FileResourceSet"
base="/home/webroot/ls-static-web/WEB-INF/lib/ls-aacustom-static-1.0-SNAPSHOT.jar"
webAppMount="/WEB-INF/lib/xxx.ar" />
</Resources>
注意事项:在PreResources标签中配置的jar包路径,一定要保证jar包是存在的,如果不存在对应的jar包,则会导致Tomcat无法启动;
|