spring-boot-starter-parent:是否可以将其包含为依赖项

时间:2019-11-29 20:24:37

标签: spring spring-boot maven

我在弹簧靴中了解了一些东西,并使用了一个非常简单的代码片段,例如将其添加到pom.xml

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

据我所知,<parent>在这种情况下意味着在我的pom.xml中,我们有一个父pom.xml(为spring-boot-starter-parent看到了pom.xml文件),它将具有依赖项列表。

重要的是它只是pom包装,而不是真正的jar /二进制文件(如果我错了,请更正)

我在mvn存储库中看到了以下内容:

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.1.RELEASE</version>
    <type>pom</type>
</dependency>

我的疑问是:

我们如何将其包含为依赖项,它只是一个pom包装(而不是真正的jar / war),它充当了存放常见依赖项的中心位置?可以吗我尝试添加项目,但是在STS IDE中看到错误。

如何下​​载?我们可以看到这个“父母”的内容吗?

2 个答案:

答案 0 :(得分:2)

首先,在这种情况下,您可能错过了parent pom的含义。

任何特定版本(在本例中为2.2.1)的春季启动都带有许多技术/库的可能集成。因此,它提供了可使用的“默认”库版本,因为很难检查它是否与所有库的所有可能版本兼容。您当然可以提供自己的版本,但是随后您应该测试作为应用程序维护者的兼容性。

因此,如果您检出spring-boot-starter-parent pom的source code,您会发现它提供了一些插件和插件管理,更重要的是,它继承自另一个名为spring-boot-dependencies的pom

请注意它不会向您的项目添加任何依赖项。它仅定义了dependencyManagement节。这意味着一旦您将在项目中使用该项目(从此pom继承)的依赖关系,就不必指定版本,只需指定组ID和工件ID。 同样,这是因为默认情况下,Spring Boot提供了非常特定的第三方版本-经验证与...兼容的版本。

现在,对于问题的第二部分-确实像在您发布的那样将依赖项包含在包装的pom中是没有意义的,请提供一个您确实看到过的链接吗?

有时候人们在他们的项目中采用spring boot时,他们已经有了一些父对象,因此他们不能使用继承,在这种情况下,他们可以使用非常特殊的maven范围“ import”,并使用对pom的依赖来处理它作为BOM(物料清单)-坦率地说,这是Maven中非常先进的东西。但是在这些情况下,Spring Boot会使用此功能。

依赖项包含如下:

<dependencies>
         ...
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.2.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>

注意,`导入行。从maven的站点中:旨在允许从远程POM文件中检索依赖管理信息,例如版本和排除项。

Here是有关此主题的教程

答案 1 :(得分:1)

@CuriousMind,包括spring-boot-starter-parent作为依赖项,就像试图实例化Java中的接口或抽象类。如您所见,它的包装是pom,这意味着它只是一个Maven工件,可以帮助您配置maven项目。 Jar and War将包含一些Java二进制文件。我认为MVN储存库代码会自动生成所有样本作为依赖项。