MAVEN:多模块项目,如何为构建添加不同的环境

Posted

技术标签:

【中文标题】MAVEN:多模块项目,如何为构建添加不同的环境【英文标题】:MAVEN: Multi-module project, How to add different environments for build 【发布时间】:2022-02-03 04:56:33 【问题描述】:

我正在处理一个复杂的多模块项目,以从 ant 转移。 我们想要实现的目标是:

    易于开发,为开发者打包。

示例:父项目 儿子A

         Parent Project
              SON 
                  GRANDSON A
                  GRANDSON B
              DAUGTER (DEPENDS ON SON)
                  GRANDSON C
                  GRANDSON D

我想要的是,当开发人员在开发子项目时,他只需下载父项目,并且应该从 svn 存储库解决 SON 依赖项。我知道可以通过在 pom.xml 中定义依赖来完成,但这会与我的第二个要求相冲突。

2) 下载父项目的所有子项目并编译它们,以便 Jenkins 等自动构建管理器可以检查构建的一致性。此外,如果构建成功,我还想将标志上的修订发布到 Maven 存储库。请注意,修订版需要是每个模块的头部。

3) 在这两个过程中,我想创建一个 tar 文件或我自己的样式目录,这些目录将根据我的需要在不同的目录中包含不同的 jar。 (我可以通过添加 ant copy 命令来实现这一点;同样的任何更好的想法)

maven 中实现它的标准方法是什么。

【问题讨论】:

您是否将每个子项目保存在自己的 SVN 存储库中?您是否有本地 Maven 工件存储库,例如 Nexus? 是的,我想将它保存在单独的仓库中。是的,我与档案合作 - 本地 Maven 工件管理器 如果您想将它们一起构建,您应该将它们保存在一个单一的 svn 存储库中,或者更准确地说是在同一个主干中。否则你走错路了。 【参考方案1】:

在您的 Maven 层次结构中,只有叶项目(您的示例中的孙子项目)才是包含代码并生成工件(例如 jar)的实际模块。内部节点(Parent、Son、Daughter)将仅用于保存由层次结构中的模块共享的公共配置和依赖项。因此,女儿不能依赖儿子,但孙子 C 可以依赖孙子 A。

如果父项目层次结构有自己的生命周期,即 pom 可以独立发布,它们应该在他们的 SVN 模块上。开发子模块的开发人员甚至不需要下载这些 pom,因为如果 Jenkins 将它们部署在那里,它们会自动从您的 Archiva 中检索。类似情况见this answer。

但是,您看到表明您希望在同一时间构建和发布所有模块。在这种情况下,您可以通过将所有项目保存在同一个 SVN 存储库中来拥有相同的 pom 层次结构。

【讨论】:

以上是关于MAVEN:多模块项目,如何为构建添加不同的环境的主要内容,如果未能解决你的问题,请参考以下文章

三十二张图告诉你,Jenkins构建SpringBoot有多简单~

Maven多环境配置

如何为多模块项目创建汇总的 Jacoco 报告?

Maven使用Maven构建多模块项目

maven构建项目(多模块项目)

使用Maven构建多模块项目