我有一个多模块 Maven 项目,其中模块 B 依赖于模块 A。我如何在重建模块 B 时重建模块 A?现在我必须在对模块 B 做任何事情之前手动安装模块 A,这真的很痛苦。
PS我看到有人问了一个类似的未回答的问题: Maven: How to use jetty:run in a multi-module Maven project, without need to install
我有一个多模块 Maven 项目,其中模块 B 依赖于模块 A。我如何在重建模块 B 时重建模块 A?现在我必须在对模块 B 做任何事情之前手动安装模块 A,这真的很痛苦。
PS我看到有人问了一个类似的未回答的问题: Maven: How to use jetty:run in a multi-module Maven project, without need to install
这通过两种方式解决。首先,B 的 POM 需要包含 A 的 <dependency>。只要在构建 B 时 A 在存储库中,它就会得到正确的版本。
为了确保 A 在 B 之前构建,Maven 反应器需要知道这种依赖关系。这是在带有 <module> 元素的多模块构建中完成的。顶级 POM 是为 <packaging>pom</packaging> 设置的,它将有两个 <module> 元素,一个用于 A,一个用于 B。它们列出的顺序或深度无关紧要,如果它们可以从源项目访问,它们将按正确的顺序构建。
请注意,没有办法尝试构建 B 并让 Maven 反应器找到 A 的源并检查它。反应堆总是需要一个源项目,并且必须通过 <module> 元素的图找到 A 和 B。这是因为 B 的构建无法判断 A 的存储库工件是否是最新的,它必须运行 A 的构建并让它弄清楚。对于他们同时这样做,包含此处描述的两者的父项目必须是构建的源项目。
另请注意,虽然 Maven 对于此类多模块项目并不比 Ant 慢,但将 Maven 项目导入 IDE 通常会导致构建速度远远快于 Maven 自身执行的速度。
在带有 m2eclipse 的 Eclipse IDE 中工作,您可以在编译时以及在 Maven 启动配置中启用工作区依赖管理。在这种情况下,将使用来自依赖项目的编译类,而不是来自 Maven 本地存储库的 jar。这适用于没有定制 jar 包装的常规项目。
自然地,在命令行中,您要么构建并安装每个项目,要么使用反应器项目在一次运行中构建两个项目,但这比在 IDE 中工作要方便得多。