我管理一个Maven POM项目,(与POM项目一样)由1个文件组成:pom.xml
。还有多个其他项目从此POM继承设置。父pom不起聚合器的作用;没有定义模块。
由于POM项目的发布版本和版本历史不同于依赖于它的项目,因此将它放在单独的SCM存储库中似乎是合乎逻辑的。我们的想法是在提交时触发自动构建作业,然后可以将新POM发布到中央工件库(Nexus)。这导致我有一个带有1个文件的Git仓库的情况。
问题:这是处理POM项目源代码版本控制的正常/期望方式吗?
答案 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)存储库。
附加说明:
-parent
后缀(例如maven-parent
,spring-parent
,hibernate-parent
)。虽然不是标准,但它是事实惯例,建议遵循SNAPSHOT
版本:更好地拥有共同父POM的多个次要(但固定)版本,而不是不稳定或可能影响SNAPSHOT
版本:它是全球父母pom,其目标是提供治理和共同的最小配置,它不应该引入不稳定性。 答案 1 :(得分:1)
您会在这里找到详细的解决方案
Single click code-versioning (Complimenting cloud-native Architecture)
我们的想法是使用 maven 插件 jgit-flow 插件并使用 Jenkins 和这个插件,我们已经创建了整个管道来自动化这个过程。