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

Maven 2 Maven:如何使用jetty:在多模块Maven项目中运行,无需安装,maven-2,jetty,maven-plugin,maven-jetty-plugin,Maven 2,Jetty,Maven Plugin,Maven Jetty Plugin,我是马文的新手。我有一个多模块maven 2项目,其结构如下(稍微简化): 我已将Web模块配置为包含。 这对于构建生产工件非常有用。对于开发,我发现我需要在我更改的任何模块上调用mvn install,然后停止jetty并调用jetty:run 如果插件能够直接从每个模块的目标目录中选择更改,那么它的效率会更高。根据jetty插件文档,似乎有这样一个功能,但这似乎只适用于WAR模块。 对我来说,更重要的是能够对资源文件进行更改,而无需重新启动jetty。这是因为大部分资源都是HTML模板文件,

我是马文的新手。我有一个多模块maven 2项目,其结构如下(稍微简化):

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

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

谢谢

Yaniv

对于多模块Maven项目,这是不可能的。Maven项目的一条基本规则是,每个项目都应该能够独立运行。这并不妨碍它们一起构建,但只要满足所有依赖关系,任何一个项目都应该能够自行构建

在这种情况下,这意味着WAR项目无法查看其他项目是否需要更新,这些其他项目的POM是构建工件需要做什么的最终声明。一旦构建了工件,它就会被放入本地存储库中。此时,源文件和工件之间没有关联,因此无法判断哪些源文件会触发WAR所依赖的工件的重建。

如果使用M2Eclipse(Eclipse插件,用于在Eclipse中紧密集成Maven),您可以在web模块中运行jetty:run目标,其他依赖项将从您的工作区中考虑,即使它们在您的本地存储库中根本不可用

在您的运行中,只有一个选项可以告诉Maven在工作区本身解析模块(默认情况下,它只获取本地存储库中部署的模块)

不幸的是,我在IDEA中不能有相同的行为,我必须在运行jetty之前运行安装:在web模块上运行。

在Eclipse中,您可以使用“运行jetty”插件来实现这一点。
在IDEA的运行配置中,有一个选项“解析工作区工件”,请选中它。

基于此答案:
解决maven可怕的限制和反应器限制的一种方法是使用skip true在父pom中定义插件,然后使用skip false在相应的子模块中重新启用它。

我通过使用maven启动器和配置Resolve Workspace工件来解决,
默认情况下未选中该选项

非常好的问题!我也弄不明白。如果你明白了,请把答案贴在这里。这太可怕了。作为一个来自其他构建系统的人,我真的很讨厌这个限制,希望它不是真的。Maven知道哪些模块驻留在文件系统上,因为它们是在父级的pom.xml中指定的。因此,它应该能够始终重建这些项目。它不需要做任何超级智能的事情,但是一个总是重建的选项会很好。没有人使用Maven构建快速迭代。将项目加载到IDE。。。IntelliJ IDEA、Eclipse或Netbeans都知道如何解析Maven项目,如果您没有特殊的插件(或者插件只需要在特定文件更改后运行),您将永远不会遇到这些您特别关心的问题。那么您如何在web应用程序中进行快速迭代呢?您是否在IDE中执行了一些操作而不是“mvn jetty:run”?或者我猜答案基本上是,你不能对一个web应用程序进行快速迭代,而不得不一直忍受重新安装项目的痛苦?我非常喜欢将项目导入我的IDE。我使用IntelliJ IDEA,它可以通过单击六个不同的容器来构建和部署,包括Tomcat、Jetty、Glassfish和Spring DM(在IDEA x中)。jetty:run目标对于签入的项目很好,只需要下载程序轻松运行,但对于迭代开发来说根本不是一个好的选择。您应该能够找到一个eclipse插件,它可以在eclipse中运行jetty,作为迭代周期的一部分自动连接到调试器。这是真的吗?我不能让它工作。见:
Project (POM packaging)
  |
  +-- Module1 (JAR)
  |     |
  |     +-- src
  |          |
  |          +-- main
  |               |
  |               +-- java
  |               +-- resources
  |
  +-- Module2 (JAR)
  |      |
  |     ...
  |
  +-- Web Module (WAR)
         |
        ...