@Spider答案的补充。
Tomcat Context hold Loader element.根据文档,部署描述符(标签中的内容)可以放在:<Context>
-
$CATALINA_BASE/conf/server.xml
- 坏 - 需要重新启动服务器才能重新读取配置
-
$CATALINA_BASE/conf/context.xml
- 坏 - 在所有应用程序之间共享
-
$CATALINA_BASE/work/$APP.war:/META-INF/context.xml
- 坏 - 需要重新打包才能更改配置
-
$CATALINA_BASE/work/[enginename]/[hostname]/$APP/META-INF/context.xml
- 不错,但看到最后一个选项!
-
$CATALINA_BASE/webapps/$APP/META-INF/context.xml
- 不错,但看到最后一个选项!
-
$CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xml
- 最佳 - 完全脱离应用程序并自动扫描更改!!!
在这里,我的配置演示了如何在层次结构之外使用项目文件的开发版本(请注意,我将此文件放入dir和intruct Maven中以预处理占位符,因此在新环境中构建后,我将其复制到):$CATALINA_BASE
src/test/resources
${basedir}
pom.xml
<filtering>true</filtering>
$CATALINA_BASE/conf/Catalina/localhost/$APP.xml
<Context docBase="${basedir}/src/main/webapp"
reloadable="true">
<!-- http://tomcat.apache.org/tomcat-7.0-doc/config/context.html -->
<Resources className="org.apache.naming.resources.VirtualDirContext"
extraResourcePaths="/WEB-INF/classes=${basedir}/target/classes,/WEB-INF/lib=${basedir}/target/${project.build.finalName}/WEB-INF/lib"/>
<Loader className="org.apache.catalina.loader.VirtualWebappLoader"
virtualClasspath="${basedir}/target/classes;${basedir}/target/${project.build.finalName}/WEB-INF/lib"/>
<JarScanner scanAllDirectories="true"/>
<!-- Use development version of JS/CSS files. -->
<Parameter name="min" value="dev"/>
<Environment name="app.devel.ldap" value="USER" type="java.lang.String" override="true"/>
<Environment name="app.devel.permitAll" value="true" type="java.lang.String" override="true"/>
</Context>
更新 Tomcat 8 更改和元素的语法,相应的部分现在如下所示:<Resources>
<Loader>
<Resources>
<PostResources className="org.apache.catalina.webresources.DirResourceSet"
webAppMount="/WEB-INF/classes" base="${basedir}/target/classes" />
<PostResources className="org.apache.catalina.webresources.DirResourceSet"
webAppMount="/WEB-INF/lib" base="${basedir}/target/${project.build.finalName}/WEB-INF/lib" />
</Resources>