git - 使用嵌套的 Git 子模块时释放多个 Maven Artifact

标签 git maven release git-submodules maven-release-plugin

我已经搜索了一段时间,但找不到任何在使用嵌套 Git 子模块时发布 Maven 模块的有效解决方案或指南/教程。

我们有一个复杂的公共(public)和私有(private)项目结构,需要特定的顺序才能成功构建。我们的目标是执行 Maven 发布,以便一步标记和部署多个 Maven Artifact

这是简化的 Maven 项目/模块和 Git 存储库结构:

parent-public:1.0.0:pom (descriptor only, no Maven modules, public Git repository)
  |  |
  |  |- public-module:1.0.0-SNAPSHOT:jar
  |     (Maven module, child of parent-public, Git submodule, public repository)
  |
  |- parent-private:1.0.0-SNAPSHOT:pom
    (Maven modules, Git submodule, private repository)
       |
       |- public-module:1.0.0-SNAPSHOT:jar
       |  (Maven module only, child of parent-public, Git submodule, public repository, released)
       |
       |- private-module:1.0.0-SNAPSHOT:war
          (Maven module, child of parent-private, released)

当前结构允许 Maven 独立构建和部署项目/模块。

当发布 public-module(从 parent-public/parent-private/public-module 目录)时,maven-release-plugin 执行良好(Git 存储库已标记并已部署发布 Artifact )。

当发布 parent-private 时,maven-release-plugin 准备并开始执行发布,然后在 target check out (这问题已讨论 here,但解决方案在我的上下文中不起作用,而且没有足够的声誉来发表评论)。

这是当前的 maven-release-plugin 配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <tagNameFormat>v@{project.version}</tagNameFormat>
        <commitByProject>true</commitByProject>
        <pushChanges>true</pushChanges>
    </configuration>
</plugin>

是否有更优雅的方式来组织 Maven 模块和 Git 存储库以发布多个 Maven Artifact ?或者,是否有人找到了在部署 Artifact 之前的 checkout 期间递归克隆 Git 子模块的解决方案?

最佳答案

这个问题的答案不会满足最初的问题,但 Maven Release 插件不够智能,无法理解 git 子模块边界。我认为您正在寻找的是 Maven Release 插件能够感知目录指向子模块以及该发布插件自动跨界标记的能力?这不会发生,而且我认为此时任何人都没有计划。

我一直建议使用 Git 的 Maven 用户永远不要打破需要跨子模块使用 Release 插件的多模块项目的界限。将其限制在一个存储库中。

同样,这不是一个很好的答案,但是使用 Maven Release Plugin 多年后,它确实不是一个很好的插件:-(

关于git - 使用嵌套的 Git 子模块时释放多个 Maven Artifact ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13378608/

相关文章:

c++ - 我应该对 Minidumps 使用什么设置?

git - 将 Squashed 子树更改推送到 gerrit

git Remote -v 解释

node.js - pm2 部署 [node.js] - stash 凭证和敏感数据

java - hbase 独立快速启动失败可通过 maven 项目重复

objective-c - Objective-C中的[ self 发布]是什么意思?

git - 如何从 Git 中的特定修订检索单个文件?

java - 构建成功时出现奇怪的 Maven 错误消息

maven - m2e:将项目转换为 maven 项目

c++ - 如何在 Visual Studio Code 中构建和运行作为发布版的 C++ 应用程序