Maven pom中的父标签代表啥?

Posted

技术标签:

【中文标题】Maven pom中的父标签代表啥?【英文标题】:What does the parent tag in Maven pom represent?Maven pom中的父标签代表什么? 【发布时间】:2011-12-23 00:14:48 【问题描述】:

例如:

<parent>
    <groupId>mycompany.trade.com</groupId>
    <artifactId>mycompany.trade.</artifactId>
    <version>1.1.1.0-SNAPSHOT</version>
</parent>

这是否意味着Maven会搜索父pom? 如果是,在哪里,按什么顺序?可能在文件夹上一级吗?或者在本地存储库中还是在 repo 中?

【问题讨论】:

值得一提的是parent标签是可选的。将其设置为任意值可能大多是无害的,但以后也可能产生意想不到的副作用。例如。 SonarCloud.io 假设您要链接到父站点。 【参考方案1】:

是的,maven 从本地存储库(或代理,如nexus)中读取父 POM,并通过合并来自父 POM 和模块 POM 的信息来创建“有效 POM”。

另见Introduction to the POM

使用父级的一个原因是您有一个中心位置来存储有关版本的信息 应该在所有模块中使用的工件、编译器设置等。

【讨论】:

【参考方案2】:

常见的依赖、属性、常量等可以在中心父项目pom.xml中定义

最重要的是父项目不能分发,它看起来很像普通的“pom.xml”,除了它也有一个包装标签

    <groupId>com.company.demo</groupId>
    <artifactId>MavenInheritance</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

孩子现在可以继承这个使用

   <parent>
        <groupId>com.company.demo</groupId>
        <artifactId>MavenInheritance</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

【讨论】:

【参考方案3】:

顾名思义,我们可以为current pom.xml 文件指出一个parent pom.xml 文件。这样做,在父 pom.xml 文件中定义的依赖项、属性、常量和更多内容也会与当前的 pom.xml(子 pom.xml)文件合并。假设您的项目 pom.xml 中有一个父标签,如下所示:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.8.RELEASE</version>
</parent>

然后,maven 从您的本地存储库(或从您已配置的 sonatypejfrog 等存储库管理器)读取该父 POM,并通过组合父 POM 和您模块的 POM 创建一个 Resultant POM

要查看组合结果,请使用以下mvn 命令:

mvn help:effective-pom  

【讨论】:

parent标签中的标签是什么意思?

以上是关于Maven pom中的父标签代表啥?的主要内容,如果未能解决你的问题,请参考以下文章

Maven 放在 JAR 文件中的 POM 文件有啥意义,它被任何东西使用吗?

使用 Maven 3.0.3 和 relativePath 表示法的不可解析的父 POM

pom.xml中properties标签中的maven编译器和plugin标签中的maven编译器之间的区别[重复]

maven pom.xml 的parent标签报错是啥原因

Maven 的 pom 文件生命周期

maven 聚合与继承