【问题标题】:Releasing multiple Maven artifacts when using nested Git submodules使用嵌套 Git 子模块时释放多个 Maven 工件
【发布时间】:2012-11-02 22:28:29
【问题描述】:

我已经搜索了一段时间,但在使用嵌套的 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目标 检出失败之前准备并开始执行发布(这个问题在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 工件?或者,在部署工件之前,是否有人找到了在结帐期间递归克隆 Git 子模块的解决方案?

【问题讨论】:

  • 这听起来像是一个 Maven 多模块构建,因此需要在单个 Git 存储库中而不是子模块中。此外,通过使用多模块构建,您可以简单地一步部署/发布整个模块。所以问题是你为什么喜欢让事情变得更复杂?
  • @khmarbaise:感谢您的评论。我们决定使用包含多个 Maven 模块的单个 Git 存储库,因为我们找不到适合我们项目结构的简单解决方案。
  • 恕我直言,真的没有好的选择。发布期间最重要的步骤之一是创建一个标签,其语义是从此标签恢复代码将为我提供此版本的所有代码。但是对于 GIT 子模块,无法确保用户从该标签中获取所有内容,因为他可以很容易地将子模块视为第一个。
  • 你总是同时发布public-module和private-module吗?
  • @frant.hartm:是的,公共和私有组件同时发布,以确保我们的 API 兼容性。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-08-30
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 2012-06-29
    • 2016-02-26
    相关资源
    最近更新 更多