10

我已经搜索了一段时间,在使用嵌套的 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)

当前的结构允许 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>

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

4

1 回答 1

5

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

对于使用 Git 的 Maven 用户,我始终建议不要打破需要跨子模块使用 Release 插件的多模块项目的界限。将其限制在单个存储库中。

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

于 2012-12-26T18:54:46.130 回答