我们有一个应用程序,直到最近才有一个Maven WAR项目。我们使用Tomcat Maven插件使用运行在本地开发人员工作站应用程序:Tomcat Maven插件和多模块Maven项目
mvn tomcat:run
我们能够改变JSP文件,同时嵌入的Tomcat实例正在运行和变化将出现在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的重构:从项目的根目录下运行WAR项目作为插件运行是无法检测到JAR文物。所以,我们切换到使用tomcat:run-war-only插件。 WAR模块现在可以正常运行。
然而,从文档,似乎运行战争唯一的目标对待WAR文件作为打包的Web应用程序。因此,我们现在对JSP文件所做的任何更改都不会在运行时由嵌入式Tomcat服务器执行。对于每个JSP文件的更改,我们都必须重新启动服务器。
是给我们在这个多模块Maven建立一种方式来运行WAR项目,动态Web应用程序,以便至少改变JSP文件是由Tomcat的回升,无需重新启动?
与Maven 3.x和Tomcat7 Maven插件,命令'MVN -am -pl artifact5 tomcat7:run'工作得很好。 – manish