我已经搜索了一段时间,但找不到任何在使用嵌套 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/