【问题标题】:Set context path irrespective for WAR version name in Tomcat设置上下文路径与 Tomcat 中的 WAR 版本名称无关
【发布时间】:2015-02-09 17:16:40
【问题描述】:

我正在使用 Maven 构建我们的应用程序。
所以战争名称将是 MyTest-1.00-SNAPSHOT1.0 。如果我在 Tomcat 中部署相同的名称,我将使用 URL 作为

//localhost:8080/MyTest-1.00-SNAPSHOT1.0

但我需要设置上下文路径 MyTest,尽管部署的 WAR 名称为 MyTest-1.00-SNAPSHOT1.0。 我需要的 URL 将是

//本地主机:8080/MyTest

总是,即使 WAR 名称有版本等。

建议我实现这个场景。

【问题讨论】:

  • 你必须创建名为 MyTest.war 的 war 文件
  • @atishshimpi 否。虽然部署的 WAR 文件名有 version 和 snaphot ,但我需要在点击 URL 时使用 Mytest 作为上下文路径

标签: java maven tomcat contextpath


【解决方案1】:

在您的 server.xml 中,您在 <Host> 下添加上下文:

  • docBase = "fileName.war"
  • path = "/path"

你的情况是 <Context docBase="MyTest-1.00-SNAPSHOT1.war" path="/MyTest" reloadable="true"/>

【讨论】:

    【解决方案2】:

    最好的办法是直接生成名为MyTest.war的war文件。为此,您可以在build 部分中使用finalName

    <build>
        <finalName>MyTest.war</finalName>
        ...
    </build>
    

    编辑:(添加更多来自 cmets 的信息)

    AFAIK 我们无法在战争中包含任何自动设置与文件名无关的上下文的内容。

    来自:Apache Tomcat 7 Configuration Reference - The Context Container # Naming

    autoDeploydeployOnStartup 操作由 主机,Web应用程序的名称和上下文路径是派生的 来自定义 Web 应用程序的文件的名称。 因此,上下文路径可能不会在 META-INF/context.xml 嵌入在应用程序中,并且有一个 上下文名称、上下文路径、上下文之间的密切关系 版本和基本文件名(名称减去任何 .war 或 .xml 文件的扩展名)。

    还说:

    如果您想使用上下文路径部署 WAR 文件或目录 与基本文件名无关,然后是以下之一 必须使用选项来防止双重部署:

    • 禁用autoDeploydeployOnStartup并在server.xml中定义所有Contexts
    • 找到主机的appBase 之外的WAR 和/或目录,并使用带有docBase 属性的context.xml 文件来定义它。

    但缺点是必须为每个新版本更新配置。

    当您使用 Maven 时,也许一个选项是 Apache Tomcat Maven Plugin 来部署战争。它允许配置不同的上下文路径(我从未使用过这个插件):

    <project>
      ...
      <build>
        ...
        <plugins>
          ...
          <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
              <path>/mycontext</path>
            </configuration>
          </plugin>
          ...
        </plugins>
        ...
      </build>
      ...
    </project>
    

    来自:Tomcat Maven Plugin Usage

    【讨论】:

    • 我不想更改创建的 WAR 名称。它将与版本和 sanpshot 一样。但我需要知道部署后我需要使用静态上下文名称,即使在部署的战争中发生了变化。
    • 那么你必须禁用autoDeploy并自己配置上下文。但是您必须为每个新版本更新它。如果启用了autoDeploy,则context 派生自文件名。
    • 我没有使用自动部署。我试图将 context.xml 放入 meta.INF 但不起作用
    • 有没有办法在java config中定义context.xml。我们的应用是基于Spring config的。我只想知道有没有办法在appconfig中定义context.xml
    • AFAIK 没有任何东西可以包括在战争中。也许你可以使用tomcat maven插件,我想不出别的了。 (我编辑了我的答案以包含对插件的引用)
    猜你喜欢
    • 2015-09-09
    • 2012-02-28
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多