3

我有两个 Maven 项目project/foo/pom.xmlproject/bar/pom.xml. 我foo依赖于bar, and I want that every timefoo/pom.xml compiles, it'll automatically compilebar`。

我怎么能用 Maven 做到这一点?

更新:我可以将它们都放入父项目中,但是,如果我想mvn jetty:run在子项目上运行,我该怎么办?

4

4 回答 4

1

选项1

在Jenkins中设置两个构建,它可以检测项目之间的依赖关系

从模块依赖项自动构建链接

Jenkins 从您的 POM 中读取项目的依赖项,如果它们也是在 Jenkins 上构建的,则触发器的设置方式是,其中一个依赖项中的新构建将自动启动项目的新构建。

选项 2

如果两个 Maven 项目密切相关(一起发布,共享相同的修订号),那么也许它们真的是同一个项目的两个模块?

如果是这种情况,请阅读以下文档以获取有关如何创建父 POM 的指南:

于 2012-07-27T09:17:42.347 回答
1

您可以将它们组合成一个具有两个模块的项目。

一个示例项目结构:

父母(pom)
    |- 富(罐子)
    |- 条(罐)

在父 pom 中:

<groupId>org.me</groupId>
<artifactId>parent-project</artifactId>
<packaging>pom</packaging>

<modules>
    <module>foo</module>
    <module>bar</module>
</modules>

在每个子 pom 中:

<artifactId>foo</artifactId>
<packaging>jar</packaging>

 <parent>
    <groupId>org.me</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

要使用 Maven 构建项目(两个模块),请从父目录执行:

$ mvn install
于 2012-07-27T09:29:42.250 回答
0

单独使用 maven 是不可能的。您可以获得的最接近的方法是将两者都作为聚合器 POM 的模块,因此您可以使用单个命令构建两者。请注意,amvn install已经考虑自上次构建以来是否发生了更改,因此您在那里节省了一些 CPU 周期。

于 2012-07-27T09:01:31.703 回答
0

首先,设置一个多模块构建,如 Daniel 所示。然后切换到父 POM 所在的目录。然后,例如要安装 foo 并在之前自动安装 bar,请键入:

mvn --also-make --projects foo install

这将检查反应器内的依赖关系,然后解析在 bar 上运行安装生命周期,然后再在 foo 上运行安装生命周期。

这适用于任何生命周期或目标。但是请注意,如果您指定 jetty:run,那么这个目标将在两个项目中运行,这可能不是您想要的。

您可以在此处找到有关此功能的更多信息:http ://maven.apache.org/guides/mini/guide-multiple-modules.html

于 2012-07-27T11:39:20.170 回答