在 WAR 的 WEB-INF 目录之外配置 Web 应用程序的上下文路径

Configuring the context path of a web app outside the WAR's WEB-INF directory

我正在尝试将我的网络应用程序作为 WAR 文件部署到 WildFly 9。

我可以通过重命名 deployments 目录中的 WAR 文件或通过在 WAR 中的 WEB-INF/jboss-web.xml 中指定上下文来指定 Web 应用程序的上下文路径文件。

有没有办法在 WAR 文件的 WEB-INF 目录 外部 指定上下文路径?这样就可以在打包 WAR.

后更改上下文路径

Web 应用程序的上下文根以三种不同的方式确定:

  • 如果它作为 EAR 的一部分部署,上下文根在 EAR 的 application.xml 文件中指定。
  • 如果作为独立部署 WAR,可以在 WEB-INF/jboss-web.xml.
  • 中指定上下文根
  • 如果未指定上下文根,则上下文根将是 WAR 文件的名称。

我不知道第四个选项。

另见官方文档:https://docs.jboss.org/jbossas/guides/webguide/r2/en/html/ch06.html

您可以使用 CLI 执行部署,在部署时指定上下文路径。

[steve@mylaptop wildfly-9.0.0.Final]$ bin/jboss-cli.sh 
You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands.
[disconnected /] connect
[standalone@localhost:9990 /] deploy /path/to/my-app-1.0-SNAPSHOT.war --runtime-name=foo.war

这将使您的应用程序在 /foo

可用

使用

deploy --help

了解更多信息。

您也可以通过 WildFly Maven Plugin 作为 CI 工作或类似工作的一部分来执行此操作。

我们正在使用以下命令将 war 文件部署到另一个上下文根:

org.wildfly.plugins:wildfly-maven-plugin:deploy-only
    -Dwildfly.deployment.filename=app.war 
    -Dwildfly.deployment.runtime.name=appcontext.war

该应用程序将部署在 /appcontext.

请注意,您应该从 jboss-web 中删除 context-root。否则,xml这个值永远赢。

可以使用 CLI console Command Line Interface in Wildfly. It's possible with command deployment-overlay 在运行时更改 war 应用程序的上下文根,这样:

deployment-overlay add --name=myAppOverlay \ --content=/WEB-INF/jboss-web.xml=/myFiles/new-jboss-web.xml \ --deployments=myApp.war --redeploy-affected

此命令强制 Wildfly 将文件 new-jboss-web.xml 的内容加载到内部 Wildfly 缓存中并使用它(在 myApp.war 的每次部署期间)作为 /WEB-INF/jboss-web.xml 文件的替换您的 war 网络存档。如您所知,Web 应用程序的上下文因此可以按以下方式在 new-jboss-web.xml 中定义:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
  <context-root>myNewPathToApp</context-root>
</jboss-web>

除了 add 操作之外,deployment-overlay CLI 命令还具有 other actions 以便使用部署覆盖进行操作(例如删除覆盖等)。