【问题标题】:How does Spring Boot provide spring-data-jpa v1.10.3.RELEASESpring Boot 如何提供 spring-data-jpa v1.10.3.RELEASE
【发布时间】:2018-09-19 03:12:55
【问题描述】:

我有一个带有 POM 的项目,它指定了对 spring-data-jpa 的依赖,如下所示:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
</dependency>

它与版本号无关,但是当我运行mvn:dependency:tree 时,我可以看到如下所示的相关部分...

    |  \- org.springframework:spring-orm:jar:4.3.3.RELEASE:compile
[INFO] +- **org.springframework.data:spring-data-jpa:jar:1.10.3.RELEASE**:compile
[INFO] |  +- org.springframework.data:spring-data-commons:jar:1.12.3.RELEASE:compile
[INFO] |  \- org.aspectj:aspectjrt:jar:1.8.9:compile
[INFO] +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile
[INFO] +- org.hibernate:hibernate-core:jar:5.0.11.Final:compile

...它显示它使用版本 1.10.3.RELEASE。

我想知道它最终是如何附带版本号的。我查了一下,既不是最新的 Maven 存储库的 Spring Data JPA 版本号,也不是其父 POM 中定义该依赖项的部分。项目POM如下:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-spring-boot</artifactId>
    <version>${camel-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>${springboot-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>${springboot-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
    <version>${springboot-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>${springboot-version}</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    <version>${springboot-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.1-api</artifactId>
    <version>1.0.0.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
</dependency>

【问题讨论】:

    标签: java spring maven spring-boot pom.xml


    【解决方案1】:

    spring-data-jpa 的版本由 spring-boot-parent 提供。

    可以在appendix-dependency-versions section of the Spring Boot docs中看到spring-boot版本和spring-data-jpa的关系。

    例如,最新版本的 Spring Boot 会提供 1.11.9.RELEASE 的版本 spring-data-jpa。

    在您显示的问题中:org.springframework.data:spring-data-jpa:jar:1.10.3.RELEASE 这表明您使用的是 Spring Boot v1.4.x,相关依赖项显示在 docs for v1.4.1 of Spring Boot 中:

    org.springframework.data spring-data-jpa 1.10.3.RELEASE

    spring-boot1.4.1.RELEASE 和spring-data-jpa1.10.3.RELEASE 之间的关系由 Maven 促成,因为 Maven 遵循 Spring Boot 的 POM 中定义的关系。

    来自the docs(我的强调):

    Spring Boot 的每个版本都提供了其支持的依赖项的精选列表。 实际上,您不需要在构建配置中为任何这些依赖项提供版本,因为 Spring Boot 会为您管理这些内容。

    精选列表包含您可以与 Spring Boot 一起使用的所有 Spring 模块以及第三方库的精致列表。该列表以标准材料清单(spring-boot-dependencies)的形式提供,可用于 Maven 和 Gradle。

    因此,Spring Boot 为您提供spring-boot-starter-data-jpa,而后者又通过对spring-data-releasetrain 的依赖提供spring-data-jpa。其确切的机制是:

    1. spring-boot-starter-data-jpa 声明对 spring-data-jpa 的依赖。
    2. spring-boot-starter-data-jpa 的父级是 spring-boot-starters
    3. spring-boot-starters 的父级是 spring-boot-parent
    4. spring-boot-parent 的父级是 spring-boot-dependencies
    5. spring-boot-dependencies 导入 spring-data-releasetrain POM:

      <dependency>
          <groupId>org.springframework.data</groupId>
          <artifactId>spring-data-releasetrain</artifactId>
          <version>${spring-data-releasetrain.version}</version>
          <scope>import</scope>
          <type>pom</type>
      </dependency>
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 2017-11-29
      • 2017-09-22
      • 1970-01-01
      • 2021-01-18
      • 2021-02-09
      • 2014-07-21
      相关资源
      最近更新 更多