【发布时间】:2012-11-07 04:25:23
【问题描述】:
我们有一个应用程序,直到最近它还是一个 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 应用程序运行,这样至少 JSP 文件的更改会被 Tomcat 拾取而无需重新启动?
【问题讨论】:
-
使用 Maven 3.x 和 Tomcat7 Maven 插件,命令
mvn -am -pl artifact5 tomcat7:run工作正常。
标签: maven-3 maven-tomcat-plugin