1. 程式人生 > >spring-boot中關於Maven依賴管理的一個問題

spring-boot中關於Maven依賴管理的一個問題

背景: 今天在使用spring boot整合redis的時候,發現一個現象對於spring boot的其他pom依賴都可以不配置version版本號

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

但是可以獲取到相應的版本jar包,這個是為什麼?

開始的時候以為不配置版本號,就會從映象倉庫中獲取最新的release版本,其實不是這樣的。
是從父pom繼承過來的。在spring boot的pom配置中會有以下配置:

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

此配置表明父節點是spring-boot-starter-parent。進入父節點的pom發現,還有一個父pom ,spring-boot-dependencies
在此pom中配置了很多需要依賴的jar的pom,所以即使在專案的pom檔案中不配置version資訊也是可以的,它們會從spring-boot-dependencies中繼承過來。

問題原因找到了,那麼迴歸到spring boot的特性上來。

在spring boot的 13.2 Maven章節中有介紹到,spring boot是如何進行maven管理的。

文中有提到 Inheriting the starter parent,從starter parent處繼承過來。還有如果不繼承可以使用配置依賴管理的方式(使用scope=import的方式)。

<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>

由此可以看出,pom之間的繼承關係。根依賴就是 spring-boot-dependencies。

在專案的pom中有時候會出現這個屬性配置:

<properties>
    <java.version>1.8</java.version>
</properties>

因為 spring-boot-starter-parent中使用的是高穩定性和相容性的jdk1.6,可以使用上述的配置完成1.8的配置。