【发布时间】: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