如何确定一组springframework依赖项的<parent>依赖项

时间:2017-09-21 01:24:01

标签: java spring maven dependencies

我想知道以下是否可行以及如何。

我正在学习春季启动的教程,并且在那里提到我们可以拥有父依赖项。

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

然后定义没有版本号的依赖项。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

这会将spring-boot-starter和spring-boot-starter-web的依赖版本1.5.6.RELEASE添加到项目依赖项中。

就像我想找到我需要添加到新项目的以下依赖项的<parent>代码片段。 <groupId>org.springframework</groupId>中的依赖关系。我需要使用4.3.9.RELEASE版本。

  • 弹簧上下文
  • 弹簧JDBC
  • 弹簧测试

谢谢!

3 个答案:

答案 0 :(得分:2)

如果您使用的是Spring Boot,那么下面的启动器将为您提供这三个依赖项:

  • spring-test将由spring-boot-starter-test
  • 提供
  • spring-context将由spring-boot-starter-data-jpa
  • 提供
  • spring-jdbc将由spring-boot-starter-jdbc
  • 提供

所以,使用以下父级:

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

...如果添加这些依赖项:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

...然后你会得到

  • 弹簧上下文
  • 弹簧JDBC
  • 弹簧测试

但是,Spring Boot 1.5.6.RELEASE依赖于你的问题中建议的那些核心Spring库 4.3.9.RELEASE的v4.3.10.RELEASE。通常,你会接受Spring的依赖关系,所以如果Sping提供了4.3.10.RELEASE,那么(a)你应该使用那个版本,或者(b)将Spring Boot降级到提供4.3.9.RELEASE的版本。 / p>

继续阅读以获取有关如何识别给定策展库的正确启动器的详细信息...

spring-boot-starter-parent是一个特殊的启动程序,它提供了有用的Maven默认值和一个依赖项管理部分,它定义了许多你可能想在POM中使用的依赖项。这些依赖关系通常被称为&#34; curated&#34;或者&#34;祝福&#34;并且由于它们是在maven层次结构中的某个依赖项管理部分中定义的,因此您可以在POM中引用它们而不使用版本标记(即它们从依赖项管理部分条目继承该版本。)

您可以看到spring-boot-starter-parent POM here并在其中窥视,您可以看到它引用了spring-boot-dependencies POM here

看看你提到的问题,你可以声明一个像这样的依赖...

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

...这是因为spring-boot-dependencies POM声明了以下内容:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>${revision}</version>
</dependency>

因此,父和启动器只是一种包装依赖声明并使应用程序开发人员更容易使用的方法。 Spring docs总结为:

  

启动器是一组方便的依赖关系描述符,您可以在应用程序中包含这些描述符。您可以获得所需的所有Spring和相关技术的一站式服务,而无需查看示例代码和复制粘贴依赖描述符的负载。例如,如果您想开始使用Spring和JPA进行数据库访问,请在项目中包含spring-boot-starter-data-jpa依赖项。

但是,意味着必须通过父级或初级者声明所有依赖项,因此,如果您使用Spring Boot,那么您可以在不使用的情况下声明依赖项您可以通过明确依赖这3个库来安全地覆盖您的问题(声明对3个核心Spring库的依赖性)中的父级或启动者。例如,只需将以下内容添加到您的pom.xml

即可
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.9.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.3.9.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.3.9.RELEASE</version>
    <scope>test</scope>
</dependency>

答案 1 :(得分:1)

因为你正在学习这些教程,所以我认为你是初学者。

春天的人们非常擅长设置生成项目的site。 这是非常容易使用。我建议在学习的同时尝试。下载一些包含您想要的依赖项的应用程序,并查看它们的设置方式。

一旦你感到舒服并希望深入了解,再次阅读@ glytching的答案,这是非常好的。

答案 2 :(得分:1)

如果您不使用Spring Boot并且仅需要Spring Framework依赖项,请使用spring-framework-bom

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>4.3.9.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

在这种情况下,依赖关系将没有指定版本:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
</dependency>

此外,如果您使用Spring Boot但又不想将spring-boot-starter-parent用作父工件,则还存在另一种选择:

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

有关详细信息,请参阅Spring Boot docs。来自文档的重要说明:

  

Spring Boot的每个版本都与Spring Framework的基本版本相关联,因此我们强烈建议您不要自己指定版本。

这意味着你应该使用为Spring Boot定义的Spring Framework版本。