Maven Parent POM的源代码版本控制

时间:2016-06-23 08:56:03

标签: java maven version-control pom.xml build-automation

我管理一个Maven POM项目,(与POM项目一样)由1个文件组成:pom.xml。还有多个其他项目从此POM继承设置。父pom不起聚合器的作用;没有定义模块。

由于POM项目的发布版本和版本历史不同于依赖于它的项目,因此将它放在单独的SCM存储库中似乎是合乎逻辑的。我们的想法是在提交时触发自动构建作业,然后可以将新POM发布到中央工件库(Nexus)。这导致我有一个带有1个文件的Git仓库的情况。

问题:这是处理POM项目源代码版本控制的正常/期望方式吗?

2 个答案:

答案 0 :(得分:1)

常见的全球(或企业)父母pom被视为分离的产品,它本身就是一个工件,具有自己的生命周期和CI工作(将其发布到Maven存储库,如Nexus in你的情况)以及它自己的版本控制存储库。

此外,它也可能不是只包含一个文件的存储库,即基本pom.xml文件,但也提供了更多资源。例如,site folder,其site.xml文件指定了其他报告或部分。如果是git存储库,它还应提供记录良好的README.md文件。

根据经验,由于许多不同项目都使用了全局Maven父POM,因此处理其版本控制和发布说明也很好。基于这个原因,我建议如下:

  • 具有以下site配置的site.xml文件夹(作为示例):
    <?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>
    
  • markdown下的其他site文件夹,为每个版本提供发行说明。例如,从上面的href开始,将会选择以下文件:release-notes-0.0.1.md.vm,提供有关其发布的信息,然后该文件将在POM的Maven站点中结束。

如您所见,即使对于超级父POM,存储库也可能包含多个pom.xml文件。因此,它应始终具有自己的版本控制(在本例中为git)存储库。

附加说明:

  • 全局父POM通常应用-parent后缀(例如maven-parentspring-parenthibernate-parent)。虽然不是标准,但它是事实惯例,建议遵循
  • 最好按照Maven official layout进行POM部分
  • 根据个人经验,避免使用SNAPSHOT版本:更好地拥有共同父POM的多个次要(但固定)版本,而不是不稳定或可能影响SNAPSHOT版本:它是全球父母pom,其目标是提供治理和共同的最小配置,它不应该引入不稳定性。

答案 1 :(得分:1)

您会在这里找到详细的解决方案

Single click code-versioning (Complimenting cloud-native Architecture)

我们的想法是使用 maven 插件 jgit-flow 插件并使用 Jenkins 和这个插件,我们已经创建了整个管道来自动化这个过程。