使用外掛
Maven使用者可以繼承 spring-boot-starter-parent 專案以獲得合理的預設值。父專案提供以下功能:
-
Java 17 作為預設的編譯器級別。
-
UTF-8 源編碼。
-
使用
-parameters進行編譯。 -
一個依賴管理部分,繼承自
spring-boot-dependenciesPOM,管理常見依賴的版本。這種依賴管理允許你在自己的 POM 中使用這些依賴時省略<version>標籤。 -
執行
repackage目標,其執行 ID 為repackage。 -
一個
nativeprofile,配置構建以生成 Native image。 -
合理的 資源過濾。
-
合理的外掛配置 (
Git Commit Id Plugin和 shade)。 -
針對
application.properties和application.yml(包括特定於配置檔案的檔案,例如application-dev.properties和application-dev.yml)進行合理的資源過濾。
由於 application.properties 和 application.yml 檔案接受 Spring 風格的佔位符(${…}),Maven 過濾已更改為使用 @..@ 佔位符。(你可以透過設定一個名為 resource.delimiter 的 Maven 屬性來覆蓋它。) |
|
然後配置源和目標選項
|
繼承 Starter Parent POM
要配置你的專案以繼承 spring-boot-starter-parent,請按如下方式設定 parent:
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.0</version>
</parent>
| 你只需在此依賴項上指定 Spring Boot 版本號。如果你匯入其他 starter,可以安全地省略版本號。 |
透過這種設定,你還可以透過在你自己的專案中覆蓋屬性來覆蓋單個依賴項。例如,要使用不同版本的 SLF4J 庫和 Spring Data 釋出列車,你需要在你的 pom.xml 中新增以下內容:
<properties>
<slf4j.version>1.7.30</slf4j.version>
<spring-data-bom.version>2024.1.10</spring-data-bom.version>
</properties>
瀏覽 Spring Boot 參考文件中的依賴版本屬性部分,以獲取完整的依賴版本屬性列表。
| 每個 Spring Boot 版本都經過設計和測試,以應對一組特定的第三方依賴項。覆蓋版本可能會導致相容性問題,應謹慎操作。 |
不使用 Parent POM 的 Spring Boot
你可能有不繼承 spring-boot-starter-parent POM 的原因。你可能擁有自己的公司標準父專案,你需要使用它,或者你可能更喜歡明確宣告所有 Maven 配置。
如果你不想使用 spring-boot-starter-parent,你仍然可以透過使用 import 範圍的依賴來保留依賴管理(但不是外掛管理)的好處,如下所示:
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>4.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
上述示例設定不允許你像前面解釋的那樣透過屬性覆蓋單個依賴項。要實現相同的結果,你需要在專案的 dependencyManagement 部分中,在 spring-boot-dependencies 條目之**前**新增條目。例如,要使用不同版本的 SLF4J 庫和 Spring Data 釋出列車,你可以在 pom.xml 中新增以下元素:
<dependencyManagement>
<dependencies>
<!-- Override SLF4J provided by Spring Boot -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<!-- Override Spring Data release train provided by Spring Boot -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-bom</artifactId>
<version>2024.1.10</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>4.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
透過命令列覆蓋設定
該外掛提供了一些以 spring-boot 開頭的使用者屬性,讓你可以透過命令列自定義配置。
例如,你可以按如下方式調整配置檔案以在執行應用程式時啟用:
$ mvn spring-boot:run -Dspring-boot.run.profiles=dev,local
如果你既想有一個預設值,又允許在命令列上覆蓋它,你應該結合使用使用者提供的專案屬性和 MOJO 配置。
<project>
<properties>
<app.profiles>local,dev</app.profiles>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<profiles>${app.profiles}</profiles>
</configuration>
</plugin>
</plugins>
</build>
</project>
上述設定確保 local 和 dev 預設啟用。現在,一個專用屬性已被公開,也可以在命令列上進行覆蓋:
$ mvn spring-boot:run -Dapp.profiles=test