7

我们有一个应用程序,直到最近它还是一个 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 文件的更改?

4

2 回答 2

3

首先使用位于 Apache 的新版本的 tomcat 插件,请参见http://tomcat.apache.org/maven-plugin-2.0/

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

于 2012-11-08T09:56:31.620 回答
3

只需先执行 mvn install 然后

mvn -pl artifact5 tomcat:run 
于 2012-11-07T11:50:10.997 回答