我有一个Web应用程序的多模块Maven项目。
project-root
|- core
|- webapp-demo
其中webapp-demo
引用core
。
大多数jsp和标记文件都放在webapp-demo
中,但也有一些放在core
中。
对于开发,我使用Maven构建和部署这个项目,作为exploded webapp(即WAR文件的内容,但未压缩)。
- JSP和标记文件已打包。
- 对
webapp-demo
中文件的更改会立即被Tomcat重新编译。当我重新加载页面时,我可以看到新版本。
但是,对core
中的jsp和标记文件的更改不会立即被Tomcat重新编译,我必须停止并启动Tomcat才能看到这些更改。
我注意到IntelliJ正确地打包了更改后的文件。新的标记文件在Web应用程序的“lib”文件夹(/WEB-INF/lib)的JAR中可用。遗憾的是,Tomcat似乎没有注意到这一点。
我想让Tomcat重新编译更改过的jsp和tag文件,即使它们位于/WEB-INF/lib中的JAR内。
也许有一个选项也“分解”这些JAR文件(或至少是它们的jsp和标记文件)?
我在GitHub上准备了一个示例项目来重现我的问题。
- 我找到了this thread,据说它不适用于/WEB-INF/lib中的内容。
- 我找到了X1 E3 F1 X,据说当一个人添加X1 M6 N1 X配置时,它就能工作。我试过这个,但没有工作。
- 我在Tomcat管理器中尝试了“启动”和“停止”webapp,但更改的标记文件仍然没有重新编译。它仍然显示旧版本。只有当我在IntelliJ中停止和启动运行配置(它停止和启动整个Tomcat)时,我才看到更改的标记文件
core
。
1条答案
按热度按时间bihw5rsg1#
我注意到Tomcat确实会在JAR文件中重新编译jsp和标记文件。
然而,IntelliJ的“Package File”动作(更新JAR中的文件)还不足以实现这一点。
要从依赖项重新编译JAR中的jsp和标记文件,我必须
core
项目并运行mvn install
webapp-demo
项目并运行mvn package
然后Tomcat会注意到更改的JAR并重新编译jsp和标记文件。
请注意,当在
core
项目中运行mvn package
时,它不起作用。当依赖项项目被打包但没有生成时,Tomcat似乎缺少了一些东西。请进一步注意,在本例中,Tomcat似乎会重新编译JAR中的所有jsp和标记文件,甚至可能会重新编译依赖于这些文件的后续项目中的其他文件。因此,在我的示例中,重新编译更改后的JAR的jsp和标记文件所需的时间几乎与从头部署Web应用程序所需的时间一样长。
使用Tomcat 9.0.50和Maven 3.6.0进行测试