Maven:如何使用jetty:在多模块Maven项目中运行,无需安装

yby*_*yby 24 maven-2 jetty maven-plugin maven-jetty-plugin

我是Maven的新手.我有一个多模块maven 2项目,具有以下结构(稍微简化):

Project (POM packaging)
  |
  +-- Module1 (JAR)
  |     |
  |     +-- src
  |          |
  |          +-- main
  |               |
  |               +-- java
  |               +-- resources
  |
  +-- Module2 (JAR)
  |      |
  |     ...
  |
  +-- Web Module (WAR)
         |
        ...
Run Code Online (Sandbox Code Playgroud)

我已将Web模块配置为包含Maven Jetty插件.这非常适合构建生产工件.为了开发,我发现我需要调用mvn install我更改的任何模块,然后停止jetty并调用jetty:再次运行.
如果有一种方法可以让插件直接从每个模块的目标目录中选择更改,那么效率会更高.根据jetty插件文档,似乎有这样的功能,但它似乎只适用于WAR模块.
对我来说更重要的是能够更改资源文件,而无需重新启动jetty.这是因为大多数资源都是HTML模板文件,在开发过程中设计和更新模板的效率极高,而无需重新启动以查看更改.

那么,有没有办法设置jetty插件的类路径,以包含每个JAR模块的目标/类和资源目录,而不是本地存储库中的实际JAR?

谢谢!
的Yaniv

Bri*_*ing 7

多模块Maven项目无法实现这一点.Maven项目的一个基本规则是每个项目都应该能够独立存在.这并不妨碍它们一起构建,但任何一个项目都应该能够自己构建,只要满足它的所有依赖关系.

在这种情况下,这意味着WAR项目无法查看其他项目以查看是否需要更新,其他项目的POM是确定构建工件需要执行的操作的权威声明.一旦构建了工件,它就被放在本地存储库中.此时源文件与工件之间没有关联,因此无法确定哪些源文件会触发WAR所依赖的工件的重建.

  • 这太可怕了.作为一个来自其他构建系统的人,我真的很讨厌这个限制,并希望这不是真的.Maven知道哪些模块驻留在文件系统上,因为它们是在父pom.xml中指定的.因此,它应该能够始终重建这些项目.它不需要做任何超级智能的事情,但总是重建的选项会很好. (5认同)
  • 我非常将项目导入我的IDE.我使用IntelliJ IDEA,只需单击即可构建和部署到六个不同的容器,包括Tomcat,Jetty,Glassfish和Spring DM(在IDEA x中).jetty:run目标非常适合签入的项目,只需要由下载程序轻松运行,但对于迭代开发来说根本不是一个好的选择. (4认同)
  • 没有人使用Maven构建快速迭代.将您的项目加载到IDE ... IntelliJ IDEA,Eclipse或Netbeans都了解如何解析Maven项目,如果您没有特殊的插件(或者插件只需要在特定文件更改后运行),您将会从来没有经历过这些你特别关心的问题. (3认同)