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 从您的本地存储库(或从您已配置的 sonatype
、jfrog
等存储库管理器)读取该父 POM,并通过组合父 POM 和您模块的 POM 创建一个 Resultant POM
。
要查看组合结果,请使用以下mvn
命令:
mvn help:effective-pom
【讨论】:
parent
标签中的标签是什么意思?以上是关于Maven pom中的父标签代表啥?的主要内容,如果未能解决你的问题,请参考以下文章
Maven 放在 JAR 文件中的 POM 文件有啥意义,它被任何东西使用吗?
使用 Maven 3.0.3 和 relativePath 表示法的不可解析的父 POM