我可以在不同路径上部署相同 war 的不同版本吗?

Can I deploy different versions of the same war on different paths?

我想在同一 Tomcat 的不同路径上部署 .war 的多个版本。例如,我希望 old.war/ 上的请求提供服务,然后 new.war/new/ 下的请求提供服务。

war 将包含相同代码的不同版本,因此大部分相同 packages/classes。这也意味着它们将服务于相同的端点,但自然具有不同的前缀(例如,当请求来自 /someendpoint 时,它应该由 old.war 提供,而当另一个请求来自 /new/someendpoint 时, 它应该由 new.war).

提供

简单的答案是肯定的。将它们命名为 ROOT.war 和 new.war。

使用 ROOT.war 时会变得复杂,因为所有 url 引用都包含空上下文

someserver/someendpoint

但是 new.war 在所有路径中都会有 "new"

someserver/new/someendpoint

我的方法是始终对应用程序使用相对 url 引用,或者使用服务器设置应用程序范围的变量作为上下文名称,然后使用

servletContext.setAttribute("cp", contextPath);

${cp}/someendpoint 在生成的 urls.

如果不使用 ROOT.war 而是使用 old.war 和 new.war 会更容易。

是的,这绝对有可能。唯一要注意的是 war 的两个名字不应该相等。

一个好的策略是对您的 war 使用命名约定。例如:project_0_0_1.war,下一个为 project_0_0_2.war,依此类推。然后您将能够部署不同的版本并使用所有版本