Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven父POM的源代码版本控制_Java_Maven_Version Control_Pom.xml_Build Automation - Fatal编程技术网

Java Maven父POM的源代码版本控制

Java Maven父POM的源代码版本控制,java,maven,version-control,pom.xml,build-automation,Java,Maven,Version Control,Pom.xml,Build Automation,我管理一个Maven POM项目,该项目(与POM项目一样)由一个文件组成:POM.xml。有多个其他项目从该POM继承设置。父pom不起聚合器的作用;其中没有定义任何模块 由于POM项目的发布周期和版本历史与依赖于它的项目不同,因此我认为将其放在单独的SCM存储库中是合乎逻辑的。其思想是在提交时触发自动构建作业,然后将新POM发布到中央工件库(Nexus)。这导致了这样一种情况:我有一个Git回购协议和一个文件 问题:这是处理POM项目源代码版本控制的正常/理想方式吗?一个通用的gloal(或

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

由于POM项目的发布周期和版本历史与依赖于它的项目不同,因此我认为将其放在单独的SCM存储库中是合乎逻辑的。其思想是在提交时触发自动构建作业,然后将新POM发布到中央工件库(Nexus)。这导致了这样一种情况:我有一个Git回购协议和一个文件

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

一个通用的gloal(或企业)父POM被视为一个独立的产品,它本身就是一个工件,具有自己的生命周期和CI作业(将其发布到Maven存储库,如您的Nexus)同样,它也有自己的版本控制存储库

此外,它也可能不是一个只有一个文件(essensial
pom.xml
文件)的存储库,而是提供更多的资源。例如,一个
站点
,其
site.xml
文件指定了一个附加的报告或部分。对于git存储库,它还应该提供一个有良好文档记录的
README.md
文件


根据经验,由于许多不同的项目都使用全局Maven父级POM,因此最好注意其版本控制和发行说明。因此,我建议采取以下措施:

  • 包含以下
    site.xml
    配置的
    site
    文件夹(作为示例):
    
    
  • site
    下的另一个
    markdown
    文件夹,提供每个版本的发行说明。例如,从上面的
    href
    中,将获取以下文件:
    release-notes-0.0.1.md.vm
    ,提供有关其发布的信息,然后将在POM的Maven站点中结束
如您所见,即使是超级父pom,存储库也可能包含不止一个
pom.xml
文件。因此,它应该始终拥有自己的版本控制(本例中为git)存储库


补充说明:

  • 全局父POM通常应用
    -parent
    后缀(例如,)。虽然不是一个标准,但它是一个事实约定,建议遵循
  • 最好按照POM部分的说明进行操作
  • 根据个人经验,避免使用
    快照
    版本:最好使用一个公共父POM的多个次要(但固定)版本,而不是不稳定或可能影响
    快照
    版本:它是全局父POM,其目标是提供治理和公共最小配置,它不应该带来不稳定
您可以在这里找到详细的解决方案


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

是的。因为这个pom代表一个被其他人使用的工件。。。
<?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>