到目前为止,我们一直在使用Tomcat 6,我们在$ CATALINA_HOME / conf / Catalina / localhost下的context.xml文件中指定要部署的war作为application1-context.xml,application2-context.xml。等
示例application1-context.xml
<Context path="/myapps/app1" docBase="C:\warfiles\appOne.war"
debug="0" privileged="true">
<Loader className="MyCustomApplicationLoader"/>
<Logger className="org.apache.catalina.logger.SystemOutLogger" verbosity="4" timestamp="true"/>
</Context>
这将在$ CATALINA_HOME / webapps文件夹下创建一个文件夹myapps#app1。
但是自从迁移到Tomcat7后,这种情况不再发生了。 除非我在tomcat appBase目录下直接使用war文件“appone.war”,即$ CATALINA_HOME / webapps,否则我的war不会被解压缩到$ CATALINA_HOME / webapps目录下的文件夹中。
我已阅读此apache错误报告: https://issues.apache.org/bugzilla/show_bug.cgi?id=51294"%3B>%3B51294<%3B/a>%3B
问题: 有什么办法可以在tomcat 7中强制执行这种行为吗?
答案 0 :(得分:1)
听起来这个问题已经fixed in Tomcat version 7.0.48,在撰写本文时,仍处于开发阶段。它也被添加到version 8。
编辑:我已设法解决此问题,而无需等待/使用7.0.48。在context.xml文件中添加unpackWAR="false"
并指定virtualClasspath
属性,使其指向target \ classes文件夹,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Context docBase="(path to .war file)">
<Loader className="org.apache.catalina.loader.VirtualWebappLoader"
virtualClasspath="(path to folder contain .class files,
usually {project folder}\target\classes\)"
searchExternalFirst="true"
unpackWAR="false" />
</Context>
searchExternalFirst
表示在查看WEB-INF目录之前,类加载器将在virtualClasspath
文件夹中查找。unpackWAR
设置为false,因为您的war文件已经在/ target / classes文件夹中展开,因此Tomcat也不需要这样做。希望这对你也有帮助。
答案 1 :(得分:0)
尝试<Context unpackWARs="true" ...
conf / catalina / ...下的文件不应手动更改。如果首次启动webapp时不存在,则会自动创建它们。你永远不应该更改这些文件,而是删除它们,然后让它们从tomcat本身创建它们(它们由war的/META-INF/context.xml
- 文件组成,如果存在的话)。