运行 mvn install 时构建兄弟项目

Posted

技术标签:

【中文标题】运行 mvn install 时构建兄弟项目【英文标题】:Build sibling projects when running mvn install 【发布时间】:2019-04-24 02:31:30 【问题描述】:

我们有一个项目最近从 ant 和糟糕的 CLI 工具切换到了 maven, 我们目前的结构是:

- parent
    - main-project:
    - sub-module-A:
    - sub-module-B:

这些项目中的每一个都在它自己的存储库中,它们通过 pom 文件链接 parent 在标签中定义了所有三个项目,而 main-project 将两个子模块都定义为依赖项。

手头的问题: 由于主项目是我部署站点的位置(在这种情况下),我想确保在运行它时更新两个模块的源代码,这意味着当我运行 mvn install 时我想编译两个子模块主项目。

我尝试使用 mvn-exec-plugin 来构建两者,但它实际上并没有构建任何东西。

知道如何解决这个问题吗?

编辑:我正在从main-project 运行mvn appengine:run,并希望在需要时安装子模块 A 和 B 的源代码

【问题讨论】:

你是否在Maven命令中执行site阶段,例如mvn install site? 执行appengine:run appengine:run 是 Maven 所说的目标,其中 installsite 是阶段。阶段可以配置为以特定顺序运行多个目标。您可能需要弄清楚如何将appengine:run 绑定到应用程序的 POM 中,以便它在较大阶段的适当位置运行,或者可能运行多个 Maven 命令(例如mvn appengine:run site)。谷歌'maven生命周期'了解更多细节,文档很不错。我对 appengine 插件了解不够,无法提供更多指导。 【参考方案1】:

假设您的main-project 依赖于sub-module-Asub-module-B,并且父级将所有项目都作为模块,即。 e.

父母

<modules>
    <module>main-project</module>
    <module>sub-module-A</module>
    <module>sub-module-B</module>
<modules>

主项目

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>sub-module-A</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>sub-module-B</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

然后,您可以使用

构建parent 项目
mvn --projects :main-project --also-make install

或使用选项的快捷方式

mvn -pl :main-project -am install

使用这些选项,仅构建 main-project 及其所有依赖项(位于 parent 的模块中的某处)。

请参阅this 和this 了解更多信息。

【讨论】:

问题是我可以从main-project 运行appengine:run 安装子模块A和B吗?

以上是关于运行 mvn install 时构建兄弟项目的主要内容,如果未能解决你的问题,请参考以下文章

Run “mvn clean install” in Eclipse

Gradle 替代 mvn install

为啥要“mvn install”战争项目?

执行 mvn install 或 mvn test 但不是来自 Intellij 时集成测试失败

mvn install in maven 到底做了啥

在 Jenkins 中运行 mvn 测试时 maven-surefire-plugin 的 Java 版本问题