<亲本GT; < dependencies>的超集
<亲本GT;和元素是两个截然不同的东西,但它们之间存在着重要的关系.
简单地说,父级定义了当前pom的父pom,依赖项定义了当前pom的实际依赖关系.
父pom可以定义依赖关系,但是孩子Maven项目继承的许多其他东西(特别是dependencyManagement元素和允许配置许多东西的构建元素)可以在某种程度上被视为依赖元素的超集.
这是elements inherited from the parent pom的清单:
groupId
version
description
url
inceptionYear
organization
licenses
developers
contributors
mailingLists
scm
issueManagement
ciManagement
properties
dependencyManagement
dependencies
repositories
pluginRepositories
build
plugin executions with matching ids
plugin configuration
etc.
reporting
profiles
作为使用依赖项和使用< parent>?
我们只能使用第一个,只能使用第二个或两个.
这实际上取决于Maven项目的设计方式.
试图列举所有可能的配置将是漫长的,并没有必要非常有帮助.
所以我认为你应该真正地保留父作为依赖关系的更多结构,因为它为子项目定义了更多的东西,但它也允许不重复你想要在一组项目中定义的实际配置.
因此,您应该优先使用parent,因为您希望继承一些子Maven项目的整体配置,而不仅仅是依赖项列表.
您的示例非常适合使用< parent>来说明客户端项目的后果.或依赖作为替代.
1)父母继承
这里的项目继承自spring-boot-starter-parent pom:
org.springframework.boot
spring-boot-starter-parent
1.5.2.RELEASE
因此,项目将继承依赖项和dependencyManagement中定义的任何内容,但它也将继承自< build>超级pom中定义的元素.
例如,您可以使用Java 8和UTF-8配置Maven编译器插件(您当然可以在子项目中重新定义):
UTF-8
1.8
@
${java.version}
UTF-8
${java.version}
此外,Spring Boot项目可能使用的其他一些插件也将在超级pom中定义,并由您的项目继承,例如:
...
org.springframework.boot
spring-boot-maven-plugin
repackage
${start-class}
...
请注意,父pom可以定义依赖项,由子项目直接继承,但不是必需的.
例如,spring-boot-starter-parent没有定义由子项目直接继承的任何依赖项,而是在< dependencyManagement>< dependencies>中定义依赖项.
这意味着此父pom的子节点可能使用依赖项,但它们必须在依赖项中明确声明它.
例如 :
org.springframework.boot
spring-boot-starter-parent
1.5.2.RELEASE
org.springframework.boot
spring-boot-starter-web
请注意,该版本未被视为已继承.
2)没有父继承
您必须通过Spring Boot应用程序定义所有必需的依赖项,或者更直接地使用importManagement中的spring-boot-dependencies依赖项和导入作用域,以便通过依赖项管理功能来声明它们:
org.springframework.boot
spring-boot-dependencies
1.5.2.RELEASE
pom
import
但在任何情况下,您都不会从父级配置的插件中继承,因为您没有父级.
因此,您应该在项目的pom.xml中明确声明它们.
例如,要定义编译器版本,使用编码并配置构建以重新打包构建的组件(使其成为独立的可执行文件),您将必须指定更多内容:
1.8
1.8
UTF-8
1.5.2.RELEASE
org.springframework.boot
spring-boot-dependencies
${springboot.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
${springboot.version}
repackage
myClass