我该怎么说?给定我的WAR-File时,Tomcat使用特定的上下文路径?
实施例: 我有一个由maven build创建的war文件,结果文件的名称相当长。 所以我不希望tomcat管理器应用程序使用war的文件名作为上下文。
在META-INF中提供context.xml没有产生预期的结果
我也在path
的{{1}}属性的文档中找到了这个:
除非在server.xml中静态定义Context,否则不得设置此字段的值,因为它将从用于.xml上下文文件或docBase的文件名中推断出来。
所以这似乎不是告诉应用程序服务器应该是什么路径的正确方法。
还有其他提示吗?
答案 0 :(得分:30)
Context Container的文档中有两个要点:
- 在
$CATALINA_BASE/conf/[enginename]/[hostname]/
目录中的单个文件(扩展名为“.xml”)中。 文件名(减去.xml扩展名)将用作上下文路径。可以使用#来定义多级上下文路径,例如, foo #bar.xml,用于/ foo / bar的上下文路径。可以使用名为ROOT.xml的文件来定义默认Web应用程序。- 仅当
$CATALINA_BASE/conf/[enginename]/[hostname]/
中的应用程序不存在上下文文件时,才会在应用程序文件内/META-INF/context.xml
的单个文件中存在。 如果将Web应用程序打包为WAR,则/META-INF/context.xml
将被复制到$CATALINA_BASE/conf/[enginename]/[hostname]/
并重命名以匹配应用程序的上下文路径。一旦此文件存在,如果在主机的appBase中放置了具有较新/META-INF/context.xml
的新WAR,则不会替换该文件。
因此,当您捆绑META-INF/context.xml
时,文件将重命名为WAR的名称,并且此名称将成为上下文路径,而不管path
元素中定义的任何Context
我在这里看到两个选项:
将生成的战争的名称设置为较短的名称(我建议使用<finalName>
而不是<warName>
,不推荐使用AFAIK):
<project>
...
<build>
<finalName>mycontext</finalName>
...
</build>
...
</project>
或者使用maven-tomcat-plugin
进行部署,并在插件配置中设置上下文路径:
<project>
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<configuration>
<path>/mycontext</path>
</configuration>
</plugin>
...
</plugins>
...
</build>
...
</project>
答案 1 :(得分:5)
我找到了一个简单的解决方案来保存war文件名并选择context-path。
您只需在主持人appBase
之外部署战争,并在appBase
目录中创建一个链接。
实施例。 :
ln -sf ${CATALINA_HOME}/wars/myapp-0.0.8-SNAPSHOT.war ${CATALINA_HOME}/webapps/myapp.war
埃克尔
答案 2 :(得分:4)
您可以设置path
的{{3}}元素的META-INF/context.xml
属性。
或者,您可以配置maven以使用自定义名称创建war工件:
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.0</version>
<configuration>
<warName>yourCustomWarName</warName>
</configuration>
</plugin>
........
</plugins>
</build>
答案 3 :(得分:2)
在你的项目中有一个文件夹META-INF,在该文件夹中有一个context.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myproject" />