先說兩種方式
- 繼承SpringBoot提供的父Pom
- 在依賴關係管理<dependencyManagement>中透過新增帶有 scope=import 的 spring-boot-dependencies 工件來進行依賴項管理
繼承SpringBoot提供的父Pom
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
這樣做的目的是將 Spring Boot 的父 POM 作為當前 Maven 專案的父級,以便繼承其預設配置和依賴項。
對工件溯源可以看到spring-boot-starter-parent
的父pom為spring-boot-dependencies
,在spring-boot-dependencies
中對各種依賴版本進行了預定義,可以統一專案中的版本依賴,從而避免了潛在的版本衝突。在這種情況下,我們只需要宣告所需的相關依賴,而不必顯式指定版本號。
例如,如果要建立一個使用 Spring Web 模組的 Spring Boot 應用程式,則只需要新增以下依賴項即可,版本會自動指定為上面的2.5.0版本:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
在依賴關係管理<dependencyManagement>中透過新增帶有 scope=import 的 spring-boot-dependencies 工件來進行依賴項管理
Spring Boot 提供父 POM,以便更輕鬆地建立 Spring Boot 應用程式。
但是,如果我們已經有父 POM 可以繼承,則使用父 POM 可能並不總是可取的。在實踐中,我們可能會受到設計規則或其他偏好的限制,無法使用不同的父級。如果我們不使用父 POM,我們仍然可以透過新增帶有 scope=import 的spring-boot-dependencies 工件來從依賴項管理中受益:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
如需建立SpringWeb模組的SpringBoot,同理:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
另一方面,如果沒有父 POM,我們將不再受益於外掛管理。 這意味著我們需要顯式新增
spring-boot-maven-plugin
:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Maven中依賴優先順序關係
在 Maven 中,依賴項的版本解析遵循以下優先順序:
- 專案內宣告的依賴項版本具有最高優先順序,即在專案 pom.xml 檔案中直接宣告的依賴項。
- 如果專案內沒有宣告依賴項版本,但在父專案的 dependencyManagement 標籤中宣告瞭版本,那麼這個版本將被使用。
- 如果專案和父專案都沒有宣告依賴項版本,但是在 Maven 中心倉庫中存在一個預設版本,那麼將會使用這個版本。
- 如果上述情況都不符合,那麼 Maven 將會嘗試解析最新版本的依賴項。
參考文獻:
- https://www.kancloud.cn/hanxuming/java001/3167494
- https://www.baeldung.com/spring-boot-dependency-management-custom-parent;
- https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html