【问题标题】:Tomcat Maven plugin and multi-module Maven projectsTomcat Maven 插件和多模块 Maven 项目
【发布时间】: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


【解决方案1】:

先做一个 mvn install 然后

mvn -pl artifact5 tomcat:run 

【讨论】:

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

首先使用位于 Apache 的新版 tomcat 插件,请参阅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!

【讨论】:

  • 任何样本可以重现您的问题?基本原型运行良好,它是一个类似的用例。
  • 我认为使用 Maven 3 你仍然需要指示 maven 打包其他模块。我使用mvn -am package tomcat7:run-war-am package 是明确打包所有模块,tomcat:run-war 无论如何只适用于 WAR。也许这同样适用于tomcat:run
猜你喜欢
  • 2011-03-09
  • 2012-03-19
  • 1970-01-01
  • 2012-09-18
  • 2011-04-07
  • 1970-01-01
  • 2018-02-06
  • 1970-01-01
  • 2011-09-03
相关资源
最近更新 更多