使用嵌套的Git子模块时释放多个Maven工件

alm*_*dap 9 git release maven git-submodules maven-release-plugin

我一直在寻找一段时间,在使用嵌套的Git子模块时找不到任何有效的解决方案或指南/教程来发布Maven模块.

我们有一个复杂的公共和私人项目结构,需要特定的订单才能成功构建.我们的目标是执行Maven版本,以便在一个步骤中标记和部署多个Maven工件.

这是简化的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)
Run Code Online (Sandbox Code Playgroud)

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

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

在发布时parent-private,maven-release-plugin准备并开始执行发布,然后在目标结账期间失败(此问题在此处讨论,但解决方案在我的上下文中不起作用且没有足够的声誉来评论).

这是当前的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>
Run Code Online (Sandbox Code Playgroud)

是否有更优雅的方式来组织Maven模块和Git存储库以释放多个Maven工件?或者,有人在部署工件之前找到了一个解决方案来在结账时递归克隆Git子模块吗?

Tim*_*ien 5

这个问题的答案不会满足最初的问题,但Maven Release插件不够智能,无法理解git子模块边界.我认为您正在寻找的是Maven Release插件能够感知目录指向子模块并且此版本插件能够跨边界自动标记吗?这种情况不会发生,我认为此时并不是任何人的计划.

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

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