我们有一个应用程序,直到最近它还是一个 Maven WAR 项目。我们使用 Tomcat Maven 插件在本地开发人员工作站上运行应用程序,使用:
mvn tomcat:run
我们能够在嵌入式 Tomcat 实例运行时更改 JSP 文件,并且更改会很好地显示在 Web 浏览器中。我了解(从插件文档中)当使用 tomcat:run 目标时,WAR 被加载为动态 Web 应用程序,因此 Tomcat 在运行时拾取源代码中对 JSP 文件所做的更改而无需重新启动。
应用程序已经达到了相当大的规模,我们需要在 Web 项目之外的几个不同地方重用大量的类,因此我们将代码库重构为一个多模块的 Maven 项目。现在的结构是:
parent Maven POM
|
---- artifact1.jar
|
---- artifact2.jar -> depends on artifact1.jar
|
---- artifact3.jar -> depends on artifact1.jar
|
---- artifact4.jar -> depends on artifact2.jar and artifact3.jar
|
---- artifact5.war -> depends on artifact1.jar, artifact2.jar, artifact3.jar and artifact4.jar
重构后,我们无法使用项目根目录中的 tomcat:run 来运行 WAR 项目,因为插件无法检测到 JAR 工件。所以,我们转而使用 tomcat:run-war-only 插件。WAR 模块现在可以正常启动。
但是,从文档看来,run-war-only 目标似乎将 WAR 文件视为打包的 Web 应用程序。因此,我们现在对 JSP 文件所做的任何更改都不会在运行时被嵌入式 Tomcat 服务器拾取。对于 JSP 文件的每次更改,我们都必须重新启动服务器。
在这个多模块 Maven 设置中,我们有没有办法将 WAR 项目作为动态 Web 应用程序运行,以便 Tomcat 在不重新启动的情况下至少获取对 JSP 文件的更改?