我们有一个应用程序,直到最近才是一个单独的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:从项目的根目录运行以运行WAR项目,因为插件无法检测到JAR工件。所以,我们切换到使用tomcat:run-war-only插件。 WAR模块现在启动正常。
但是,从文档中可以看出,仅运行战争目标将WAR文件视为打包的Web应用程序。因此,我们对JSP文件所做的任何更改现在都不会被嵌入式Tomcat服务器在运行时获取。对于JSP文件的每次更改,我们都必须重新启动服务器。
我们在这个多模块Maven中是否有办法将WAR项目作为动态Web应用程序运行,以便Tomcat至少可以在不重新启动的情况下获取对JSP文件的更改?
答案 0 :(得分:3)
先做一个mvn安装,然后再做
mvn -pl artifact5 tomcat:run
答案 1 :(得分:3)
首先使用现在位于Apache的新版tomcat插件,请参阅http://tomcat.apache.org/maven-plugin-2.0/。
然后如果你使用maven3,你只需使用tomcat6 / tomcat7:从顶部运行。模块中的所有类都将添加到您的webapp类加载器中(因为您不需要先安装所有jar,所以会保存一些ios!)请参阅http://tomcat.apache.org/maven-plugin-2.0/run-mojo-features.html
HTH!