如何在maven模块化项目上运行jetty

时间:2015-02-20 14:52:34

标签: java eclipse maven embedded-jetty maven-jetty-plugin

我正在开发一个带有maven的模块化项目,它具有以下骨架:

 |-- parent  (pom packaging)
 |-- model   (jar packaging)
     pom.xml
 |-- services (jar packaging)
     pom.xml
 |-- web-app  (jar packaging)
     pom.xml

的pom.xml

我正在使用jetty插件作为嵌入式servlet容器,这个问题很多时候我需要运行war项目,从我的IDE或web-app文件夹运行 mvn jetty:run 。这是编译,测试,打包,... web-app而不是其他模块。总结我想要的比当我运行 mvn jetty:run 时,所有模块都将被编译,测试,打包。如何配置jetty插件来执行此操作?

编辑1

假设我在eclipse上修改了服务模块上的一些cleasses,我在eclispe上有以下配置:

enter image description here

通过这种方式我失去了有关服务模块的更改,我必须从命令行运行 mvn -pl service clean install 然后我可以使用eclipse配置并拥有所有更新。我只想在日食上使用maven构建来做所有事情。

1 个答案:

答案 0 :(得分:0)

您可以拥有一个多模块项目(最好与父项目不同)并在所有项目上执行mvn clean install,然后在您的webapp项目上运行mvn jetty:

因此,您将在多模块项目上运行类似mvn clean install jetty:run的内容。我没有自己测试,因为我没有按照这种方式运行我的服务器,如评论中所述。

我认为多模块方法是最好的,因为在maven的“正常”使用中,没有办法告诉项目B依赖并且jar项目A重新编译A.预期的行为是看在jar的本地/远程回购中。

但是,如果项目没有不同的生命周期,我强烈反对使用多个项目(模型,dao,服务......)。如果您跨项目共享模型,如果jar项目在多个war项目中重用,这是有道理的。在这种情况下,您将拥有不同的版本号,可能想要重建所有模块等等....

如果情况并非如此,那么在不享受任何好处的情况下,您将面临增加的复杂性。

编辑:在您的情况下,您需要模块化方法,因为该模型与其他应用共享。但在这种情况下,除非您的其他应用程序具有相同的生命周期,否则您无法灵活地修改模型而不确定您是否不会影响其他项目。因此,您将需要另一个版本号,可能是SNAPSHOT,在这种情况下,在Eclipse中运行jetty是运行最新版本代码的最简单的解决方案。