使用 Plugin

Maven 使用者可以繼承 spring-boot-starter-parent 專案以取得合理的預設值。父專案提供以下功能

  • Java 17 作為預設編譯器層級。

  • UTF-8 原始碼編碼。

  • 使用 -parameters 進行編譯。

  • 依賴性管理區段,繼承自 spring-boot-dependencies POM,用於管理常見依賴性的版本。此依賴性管理讓您在使用自己的 POM 時,可以省略這些依賴性的 <version> 標籤。

  • 執行 repackage goal 並帶有 repackage 執行 ID。

  • native 設定檔,用於設定建置以能夠產生 Native image。

  • 合理的 資源篩選

  • 合理的 Plugin 組態(Git commit IDshade)。

  • application.propertiesapplication.yml(包括設定檔特定檔案,例如 application-dev.propertiesapplication-dev.yml)的合理資源篩選

由於 application.propertiesapplication.yml 檔案接受 Spring 樣式佔位符 (${…​}),Maven 篩選已變更為使用 @..@ 佔位符。(您可以透過設定名為 resource.delimiter 的 Maven 屬性來覆寫它。)

spring-boot-starter-parent 設定 maven.compiler.release 屬性,該屬性會限制 --add-exports--add-reads--patch-module 選項,如果它們修改系統模組。如果您需要使用這些選項,請取消設定 maven.compiler.release

<maven.compiler.release></maven.compiler.release>

然後組態 source 和 target 選項來代替

<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>

繼承 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>3.3.5</version>
</parent>
您應該只需要在此依賴性上指定 Spring Boot 版本號碼。如果您匯入其他 starters,您可以安全地省略版本號碼。

透過該設定,您也可以透過覆寫您自己專案中的屬性來覆寫個別的依賴性。例如,若要使用不同版本的 SLF4J 程式庫和 Spring Data 發行系列,您會將以下內容新增至您的 pom.xml

<properties>
	<slf4j.version>1.7.30</slf4j.version>
	<spring-data-releasetrain.version>Moore-SR6</spring-data-releasetrain.version>
</properties>

瀏覽 Spring Boot 參考文件中的 依賴性版本屬性 章節,以取得依賴性版本屬性的完整清單。

不使用 Parent POM 的情況下使用 Spring Boot

您可能有原因不從 spring-boot-starter-parent POM 繼承。您可能有自己的企業標準父項需要使用,或者您可能偏好明確宣告所有 Maven 組態。

如果您不想使用 spring-boot-starter-parent,您仍然可以透過使用 import 範圍的依賴性來保留依賴性管理的好處(但不是 Plugin 管理),如下所示

<dependencyManagement>
	<dependencies>
		<dependency>
			<!-- Import dependency management from Spring Boot -->
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-dependencies</artifactId>
			<version>3.3.5</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-releasetrain</artifactId>
			<version>2020.0.0-SR1</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-dependencies</artifactId>
			<version>3.3.5</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

覆寫命令列上的設定

此 Plugin 提供許多使用者屬性(以 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>

以上確保預設啟用 localdev。現在已公開專用屬性,這也可以在命令列上覆寫

$ mvn spring-boot:run -Dapp.profiles=test