Maven pom文件中的父标签代表什么?

113
例如:
<parent>
    <groupId>mycompany.trade.com</groupId>
    <artifactId>mycompany.trade.</artifactId>
    <version>1.1.1.0-SNAPSHOT</version>
</parent>

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


需要在某个地方提到parent标签是可选的。将其设置为任意值可能大多数情况下都是无害的,但以后也可能会产生意想不到的副作用。例如,SonarCloud.io假设您希望链接到父站点。 - MarkHu
4个回答

102

是的,Maven会从您的本地仓库(或代理仓库,如Nexus)读取父POM并通过合并父POM和模块POM的信息创建一个“有效POM”。

请参见POM介绍

使用父POM的一个原因是可以将应该在所有模块中使用的制品版本、编译器设置等信息存储在一个中心位置。


22

通用的依赖项、属性、常量等可以在中央父项目 pom.xml 中定义。

最重要的是,父项目不能被分发,它看起来非常类似于普通的 "pom.xml",除了它还有一个packaging标签。

    <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>

15

如其名称所示,我们可以为当前的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 标签中的标签是什么意思? - mazend

0
这是在多模块项目中使用的实践,其中我们需要从父项目继承依赖项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接