spring-boot中關於Maven依賴管理的一個問題
阿新 • • 發佈:2019-02-13
背景: 今天在使用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的配置。