2012-11-07 159 views
7

我们有一个应用程序,直到最近才有一个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的回升,无需重新启动?

+0

与Maven 3.x和Tomcat7 Maven插件,命令'MVN -am -pl artifact5 tomcat7:run'工作得很好。 – manish

回答

3

只是做一个MVN安装第一和Tomcat插件现在位于阿帕奇然后

mvn -pl artifact5 tomcat:run 
+0

我知道这是一个解决方案,只需要两个步骤而不是一个。不过,这是一个有效的解决方案,我很乐意接受它作为答案。我必须运行构建为mvn -pl artifact5 -am tomcat:运行时减少实例的数量,即使这不起作用。 :) – manish

3

第一次使用新版本中看到http://tomcat.apache.org/maven-plugin-2.0/

这时如果使用maven3,您只需使用的tomcat6/tomcat7:从顶部运行。模块中的所有类都将添加到您的webapp类加载器中(将节省一些ios,因为您不需要首先安装所有jar)!请参阅http://tomcat.apache.org/maven-plugin-2.0/run-mojo-features.html

HTH!

+0

我曾尝试过最新的插件,但这并没有帮助。 :( – manish

+0

任何样品重现你的问题的基本原型正常工作,这是一个类似用途的情况下 –

+0

我想与Maven 3,你仍然需要指导Maven来打包其他模块我用'MVN -am包tomcat7:。运行-am'' -am package'用于明确地封装所有的模块,'tomcat:run-war'只适用于WAR,也可能同样适用于'tomcat:run'。 –