如何让 tomcat 从目录中自动部署 WAR 文件,但仍使用原始 appBase 目录

Posted

技术标签:

【中文标题】如何让 tomcat 从目录中自动部署 WAR 文件,但仍使用原始 appBase 目录【英文标题】:How can I get tomcat to auto-deploy WAR files from a directory, but still using the original appBase directory 【发布时间】:2020-08-22 22:30:06 【问题描述】:

我需要在嵌入式解决方案中部署我的应用程序(在树莓派零上运行)。因此,我只能在 localhost 上部署东西。我对虚拟主机不太熟悉,所以我可能错了。

我的问题是我希望 tomcat 自动部署包含在我克隆到树莓派上的 git 存储库中的 war 文件。这样就可以轻松地通过 git 存储库进行更新,而不必与管理器打交道。话虽如此,我也喜欢让管理器和其他管理工具保持活跃和工作,它们包含在默认的 webapps 目录中。将这些复制到 git 存储库不是我想做的事情,因为它们会被放错位置并保存在存储库中,这是不必要的。此外,我希望 tomcat “爆炸”或提取原始 webapps 目录中的 WAR 文件,以免将这些文件添加到 git 存储库。

基本上,我希望能够在某个目录中自动部署所有war文件,而无需实际写入该目录,同时还可以在“标准”webapps目录中自动部署war文件。

这可能吗?

我用的是tomcat9

【问题讨论】:

【参考方案1】:

解决方案 A:

Tomcat 9 只有一个 appBase 属性,默认为webapps。为了改变你需要配置 2 Common attributes :

1.appBase:将此参数设置为需要部署的war所在的文件夹。 2.autoDeploy:确保设置为true。

不可能有 2 个 appbase 目录。所以原来的 webapps 不能用于自动部署。

解决方案 B:

使用脚本从 GIT 存储库中提取 WAR,这也会将文件复制或移动到 Tomcat9 的标准 webapps 文件夹。 例如

git pull rm path/to/tomcat/webapps/warname.war  
mv warname.war
path/to/tomcat/webapps

解决方案 C:

将您的 GIT 存储库或其他 GIT 存储库配置为仅将 webapps 文件夹包含在所需的战争中。如果您仅使用此文件夹从您的 GIT 存储库中提取战争,则无需提交默认的 Tomcat 应用程序。请参阅以下步骤。 从vanilla Tomcat 9 安装开始

    webapps 重命名为webappsOriginal

    克隆 webapps 存储库,以便现在创建另一个 webapps 文件夹,其中仅包含战争。

    webappsOriginal的所有内容移动到webapps

    删除webappsOriginal

现在,如果您从存储库中拉取更新的战争,将被获取并自动部署。 没有理由在 GIT 中添加、提交或推送现有文件。

【讨论】:

【参考方案2】:

如何使用“inotify”来监视克隆存储库中的 war 目录,如果它发生变化,将战争复制到 tomcat 的“webapps”中,这将自动部署更改的应用程序。您可以为此安装 inotify-tools。有关更多信息,请查看here。

【讨论】:

以上是关于如何让 tomcat 从目录中自动部署 WAR 文件,但仍使用原始 appBase 目录的主要内容,如果未能解决你的问题,请参考以下文章

tomcat war包解压问题

Tomcat没有自动部署war文件

在tomcat服务器中部署war文件

如何部署war包到tomcat

自动部署批处理

JavaEE - WAR - 已部署 :: 如何从资源目录中读取文件 [重复]