Maven 父 POM 的源代码版本控制
Source code versioning of Maven Parent POM
我管理一个 Maven POM 项目,该项目(与 POM 项目一样)由 1 个文件组成:pom.xml
。有多个其他项目从该 POM 继承设置。父 pom 不作为聚合器;其中没有定义模块。
由于 POM 项目与依赖于它的项目具有不同的发布周期和版本历史记录,因此将它放在单独的 SCM 存储库中对我来说似乎是合乎逻辑的。这个想法是在提交时触发自动构建作业,然后可以将新的 POM 发布到中央工件存储库 (Nexus)。这导致我有一个包含 1 个文件的 Git 回购协议。
问题:这是 normal/desired 处理 POM 项目源代码版本控制的方法吗?
一个通用的全球(或企业)父 pom 被认为是一个独立的产品,它本身就是一个工件,有自己的生命周期和 CI 作业(将它发布到 Maven 存储库,比如Nexus 在你的情况下),因此也有自己的版本控制库。
此外,它也可能不是只有一个文件的存储库,即基本的 pom.xml
文件,但还提供更多资源。例如,site
folder,其 site.xml
文件指定了一个额外的报告或部分。如果是 git 存储库,它还应该提供一个有据可查的 README.md
文件。
根据经验,由于全局 Maven 父 POM 被许多不同的项目使用,因此最好注意其版本控制和发行说明。出于这个原因,我建议有以下内容:
- 具有以下
site.xml
配置的site
文件夹(作为示例):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/DECORATION/1.4.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/DECORATION/1.4.0
http://maven.apache.org/xsd/decoration-1.4.0.xsd">
<body>
<menu ref="reports" />
<menu name="Release Notes">
<item name="0.0.1" href="release-notes-0.0.1.html" />
</menu>
</body>
</project>
site
下的附加 markdown
文件夹提供每个版本的发行说明。例如,从上面的 href
中,将选取以下文件:release-notes-0.0.1.md.vm
,提供有关其发布的信息,然后将在 POM 的 Maven 站点中结束。
如您所见,存储库可能包含多个 pom.xml
文件,即使对于超级父 POM 也是如此。因此,它应该始终有自己的版本控制(在本例中为 git)存储库。
补充说明:
- 全局父 POM 通常应用
-parent
后缀(例如 maven-parent
, spring-parent
, hibernate-parent
)。虽然不是标准,但这是事实上的约定,建议遵循
- 对于 POM 部分,最好遵循 Maven official layout
- 根据个人经验,避免使用
SNAPSHOT
版本:最好有多个次要(但固定)版本的公共父 POM,而不是不稳定或可能影响 SNAPSHOT
版本:它是全局父pom,它的目标是提供治理和通用的最小配置,它不应该引入不稳定。
您会在这里找到详细的解决方案
Single click code-versioning (Complimenting cloud-native Architecture)
我们的想法是使用 maven 插件 jgit-flow 插件并使用 Jenkins 和这个插件我们创建了整个管道来自动化这个过程。
我管理一个 Maven POM 项目,该项目(与 POM 项目一样)由 1 个文件组成:pom.xml
。有多个其他项目从该 POM 继承设置。父 pom 不作为聚合器;其中没有定义模块。
由于 POM 项目与依赖于它的项目具有不同的发布周期和版本历史记录,因此将它放在单独的 SCM 存储库中对我来说似乎是合乎逻辑的。这个想法是在提交时触发自动构建作业,然后可以将新的 POM 发布到中央工件存储库 (Nexus)。这导致我有一个包含 1 个文件的 Git 回购协议。
问题:这是 normal/desired 处理 POM 项目源代码版本控制的方法吗?
一个通用的全球(或企业)父 pom 被认为是一个独立的产品,它本身就是一个工件,有自己的生命周期和 CI 作业(将它发布到 Maven 存储库,比如Nexus 在你的情况下),因此也有自己的版本控制库。
此外,它也可能不是只有一个文件的存储库,即基本的 pom.xml
文件,但还提供更多资源。例如,site
folder,其 site.xml
文件指定了一个额外的报告或部分。如果是 git 存储库,它还应该提供一个有据可查的 README.md
文件。
根据经验,由于全局 Maven 父 POM 被许多不同的项目使用,因此最好注意其版本控制和发行说明。出于这个原因,我建议有以下内容:
- 具有以下
site.xml
配置的site
文件夹(作为示例):<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/DECORATION/1.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/DECORATION/1.4.0 http://maven.apache.org/xsd/decoration-1.4.0.xsd"> <body> <menu ref="reports" /> <menu name="Release Notes"> <item name="0.0.1" href="release-notes-0.0.1.html" /> </menu> </body> </project>
site
下的附加markdown
文件夹提供每个版本的发行说明。例如,从上面的href
中,将选取以下文件:release-notes-0.0.1.md.vm
,提供有关其发布的信息,然后将在 POM 的 Maven 站点中结束。
如您所见,存储库可能包含多个 pom.xml
文件,即使对于超级父 POM 也是如此。因此,它应该始终有自己的版本控制(在本例中为 git)存储库。
补充说明:
- 全局父 POM 通常应用
-parent
后缀(例如maven-parent
,spring-parent
,hibernate-parent
)。虽然不是标准,但这是事实上的约定,建议遵循 - 对于 POM 部分,最好遵循 Maven official layout
- 根据个人经验,避免使用
SNAPSHOT
版本:最好有多个次要(但固定)版本的公共父 POM,而不是不稳定或可能影响SNAPSHOT
版本:它是全局父pom,它的目标是提供治理和通用的最小配置,它不应该引入不稳定。
您会在这里找到详细的解决方案
Single click code-versioning (Complimenting cloud-native Architecture)
我们的想法是使用 maven 插件 jgit-flow 插件并使用 Jenkins 和这个插件我们创建了整个管道来自动化这个过程。