使用 Maven 執行您的應用程式

此外掛程式包含一個 run 目標,可用於從命令列啟動您的應用程式,如下列範例所示

$ mvn spring-boot:run

應用程式引數可以使用 arguments 參數指定,詳情請參閱使用應用程式引數

應用程式會在派生的程序中執行,並且在命令列上設定屬性將不會影響應用程式。如果您需要指定一些 JVM 引數(用於偵錯目的),可以使用 jvmArguments 參數,詳情請參閱偵錯應用程式。此外,也明確支援系統屬性環境變數

由於啟用設定檔非常常見,因此有一個專用的 profiles 屬性,它為 -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev" 提供了快捷方式,詳情請參閱指定活動設定檔

Spring Boot devtools 是一個模組,旨在改善在 Spring Boot 應用程式上工作時的開發時期體驗。若要啟用它,只需將以下依賴新增至您的專案

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<optional>true</optional>
	</dependency>
</dependencies>

devtools 執行時,它會在您重新編譯應用程式時偵測到變更,並自動重新整理它。這不僅適用於資源,也適用於程式碼。它還提供了一個 LiveReload 伺服器,以便在發生變更時自動觸發瀏覽器重新整理。

Devtools 也可以設定為僅在靜態資源變更時重新整理瀏覽器(並忽略程式碼中的任何變更)。只需在您的專案中包含以下屬性

spring.devtools.remote.restart.enabled=false

devtools 之前,此外掛程式預設支援資源的熱重新整理,但現在已停用,轉而使用上述解決方案。您可以隨時透過組態您的專案來還原它

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<addResources>true</addResources>
				</configuration>
			</plugin>
		</plugins>
	</build>

addResources 啟用時,任何 src/main/resources 目錄將會在您執行應用程式時新增至應用程式類別路徑,並且將移除在類別輸出中找到的任何重複項。這允許資源的熱重新整理,這在開發網路應用程式時非常有用。例如,您可以處理 HTML、CSS 或 JavaScript 檔案,並立即看到您的變更,而無需重新編譯您的應用程式。這也是讓您的前端開發人員在無需下載和安裝 Java IDE 的情況下工作的實用方法。

使用此功能的一個副作用是,在建置時篩選資源將無法運作。

為了與 repackage 目標保持一致,run 目標建置類別路徑的方式是,在外掛程式組態中排除的任何依賴也會從類別路徑中排除。如需更多詳細資訊,請參閱專用範例

有時執行應用程式的測試變體很有用。例如,如果您想要在開發時期使用 Testcontainers 或使用一些測試存根。將 test-run 目標與 run 的許多相同功能和組態選項一起使用以達到此目的。

spring-boot:run

org.springframework.boot:spring-boot-maven-plugin:3.3.5

就地執行應用程式。

必要參數

名稱 類型 預設值

classesDirectory

檔案

${project.build.outputDirectory}

選用參數

名稱 類型 預設值

addResources

布林值

false

additionalClasspathElements

字串陣列

agents

檔案陣列

arguments

字串陣列

commandlineArguments

字串

directories

字串陣列

environmentVariables

Map

excludeGroupIds

字串

excludes

List

includes

List

jvmArguments

字串

mainClass

字串

noverify

布林值

optimizedLaunch

布林值

true

profiles

字串陣列

skip

布林值

false

systemPropertyVariables

Map

useTestClasspath

布林值

false

workingDirectory

檔案

參數詳細資訊

addResources

直接將 Maven 資源新增至類別路徑,這允許資源的即時就地編輯。重複的資源會從 target/classes 中移除,以防止它們在呼叫 ClassLoader.getResources() 時出現兩次。請考慮將 spring-boot-devtools 新增至您的專案,因為它提供了此功能以及更多功能。

名稱

addResources

類型

布林值

預設值

false

使用者屬性

spring-boot.run.addResources

1.0.0

additionalClasspathElements

應新增至類別路徑的其他類別路徑元素。元素可以是包含類別和資源的目錄或 jar 檔案。

名稱

additionalClasspathElements

類型

java.lang.String[]

預設值

使用者屬性

spring-boot.run.additional-classpath-elements

3.2.0

agents

代理程式 jar 的路徑。

名稱

agents

類型

java.io.File[]

預設值

使用者屬性

spring-boot.run.agents

2.2.0

arguments

應傳遞至應用程式的引數。

名稱

arguments

類型

java.lang.String[]

預設值

使用者屬性

1.0.0

classesDirectory

包含應用程式應執行之類別和資源檔案的目錄。

名稱

classesDirectory

類型

java.io.File

預設值

${project.build.outputDirectory}

使用者屬性

1.0.0

commandlineArguments

應傳遞至應用程式的命令列引數。使用空格分隔多個引數,並確保將多個值括在引號之間。指定時,優先於 #arguments

名稱

commandlineArguments

類型

java.lang.String

預設值

使用者屬性

spring-boot.run.arguments

2.2.3

directories

應新增至類別路徑的其他包含類別或資源的目錄。

名稱

directories

類型

java.lang.String[]

預設值

使用者屬性

spring-boot.run.directories

1.0.0

environmentVariables

應與用於執行應用程式的派生程序相關聯的環境變數清單。

名稱

environmentVariables

類型

java.util.Map

預設值

使用者屬性

2.1.0

excludeGroupIds

要排除的 groupId 名稱的逗號分隔清單(完全符合)。

名稱

excludeGroupIds

類型

java.lang.String

預設值

使用者屬性

spring-boot.excludeGroupIds

1.1.0

excludes

要排除的構件定義集合。Exclude 元素定義了強制性的 groupIdartifactId 組件以及一個可選的 classifier 組件。當組態為屬性時,值應以逗號分隔,組件以冒號分隔:groupId:artifactId,groupId:artifactId:classifier

名稱

excludes

類型

java.util.List

預設值

使用者屬性

spring-boot.excludes

1.1.0

includes

要包含的構件定義集合。Include 元素定義了強制性的 groupIdartifactId 組件以及一個可選的 classifier 組件。當組態為屬性時,值應以逗號分隔,組件以冒號分隔:groupId:artifactId,groupId:artifactId:classifier

名稱

includes

類型

java.util.List

預設值

使用者屬性

spring-boot.includes

1.2.0

jvmArguments

應與用於執行應用程式的派生程序相關聯的 JVM 引數。在命令列上,請確保將多個值括在引號之間。

名稱

jvmArguments

類型

java.lang.String

預設值

使用者屬性

spring-boot.run.jvmArguments

1.1.0

mainClass

主類別的名稱。如果未指定,將使用找到的第一個包含「main」方法的已編譯類別。

名稱

mainClass

類型

java.lang.String

預設值

使用者屬性

spring-boot.run.main-class

1.0.0

noverify

標記代理程式需要 -noverify。

名稱

noverify

類型

布林值

預設值

使用者屬性

spring-boot.run.noverify

1.0.0

optimizedLaunch

是否應最佳化 JVM 的啟動。

名稱

optimizedLaunch

類型

布林值

預設值

true

使用者屬性

spring-boot.run.optimizedLaunch

2.2.0

profiles

要啟用的 Spring 設定檔。指定 'spring.profiles.active' 引數的便利快捷方式。在命令列上,使用逗號分隔多個設定檔。

名稱

profiles

類型

java.lang.String[]

預設值

使用者屬性

spring-boot.run.profiles

1.3.0

skip

略過執行。

名稱

skip

類型

布林值

預設值

false

使用者屬性

spring-boot.run.skip

1.3.2

systemPropertyVariables

要傳遞至程序的 JVM 系統屬性清單。

名稱

systemPropertyVariables

類型

java.util.Map

預設值

使用者屬性

2.1.0

useTestClasspath

在執行時包含測試類別路徑的標記。

名稱

useTestClasspath

類型

java.lang.Boolean

預設值

false

使用者屬性

spring-boot.run.useTestClasspath

1.3.0

workingDirectory

要用於應用程式的目前工作目錄。如果未指定,將使用 basedir。

名稱

workingDirectory

類型

java.io.File

預設值

使用者屬性

spring-boot.run.workingDirectory

1.5.0

spring-boot:test-run

org.springframework.boot:spring-boot-maven-plugin:3.3.5

使用測試執行階段類別路徑就地執行應用程式。將用於啟動應用程式的主類別判斷方式如下:已組態的主類別(如果有的話)。然後是在測試類別目錄中找到的主類別(如果有的話)。然後是在類別目錄中找到的主類別(如果有的話)。

必要參數

名稱 類型 預設值

classesDirectory

檔案

${project.build.outputDirectory}

testClassesDirectory

檔案

${project.build.testOutputDirectory}

選用參數

名稱 類型 預設值

addResources

布林值

false

additionalClasspathElements

字串陣列

agents

檔案陣列

arguments

字串陣列

commandlineArguments

字串

directories

字串陣列

environmentVariables

Map

excludeGroupIds

字串

excludes

List

includes

List

jvmArguments

字串

mainClass

字串

noverify

布林值

optimizedLaunch

布林值

true

profiles

字串陣列

skip

布林值

false

systemPropertyVariables

Map

workingDirectory

檔案

參數詳細資訊

addResources

直接將 Maven 資源新增至類別路徑,這允許資源的即時就地編輯。重複的資源會從 target/classes 中移除,以防止它們在呼叫 ClassLoader.getResources() 時出現兩次。請考慮將 spring-boot-devtools 新增至您的專案,因為它提供了此功能以及更多功能。

名稱

addResources

類型

布林值

預設值

false

使用者屬性

spring-boot.run.addResources

1.0.0

additionalClasspathElements

應新增至類別路徑的其他類別路徑元素。元素可以是包含類別和資源的目錄或 jar 檔案。

名稱

additionalClasspathElements

類型

java.lang.String[]

預設值

使用者屬性

spring-boot.run.additional-classpath-elements

3.2.0

agents

代理程式 jar 的路徑。

名稱

agents

類型

java.io.File[]

預設值

使用者屬性

spring-boot.run.agents

2.2.0

arguments

應傳遞至應用程式的引數。

名稱

arguments

類型

java.lang.String[]

預設值

使用者屬性

1.0.0

classesDirectory

包含應用程式應執行之類別和資源檔案的目錄。

名稱

classesDirectory

類型

java.io.File

預設值

${project.build.outputDirectory}

使用者屬性

1.0.0

commandlineArguments

應傳遞至應用程式的命令列引數。使用空格分隔多個引數,並確保將多個值括在引號之間。指定時,優先於 #arguments

名稱

commandlineArguments

類型

java.lang.String

預設值

使用者屬性

spring-boot.run.arguments

2.2.3

directories

應新增至類別路徑的其他包含類別或資源的目錄。

名稱

directories

類型

java.lang.String[]

預設值

使用者屬性

spring-boot.run.directories

1.0.0

environmentVariables

應與用於執行應用程式的派生程序相關聯的環境變數清單。

名稱

environmentVariables

類型

java.util.Map

預設值

使用者屬性

2.1.0

excludeGroupIds

要排除的 groupId 名稱的逗號分隔清單(完全符合)。

名稱

excludeGroupIds

類型

java.lang.String

預設值

使用者屬性

spring-boot.excludeGroupIds

1.1.0

excludes

要排除的構件定義集合。Exclude 元素定義了強制性的 groupIdartifactId 組件以及一個可選的 classifier 組件。當組態為屬性時,值應以逗號分隔,組件以冒號分隔:groupId:artifactId,groupId:artifactId:classifier

名稱

excludes

類型

java.util.List

預設值

使用者屬性

spring-boot.excludes

1.1.0

includes

要包含的構件定義集合。Include 元素定義了強制性的 groupIdartifactId 組件以及一個可選的 classifier 組件。當組態為屬性時,值應以逗號分隔,組件以冒號分隔:groupId:artifactId,groupId:artifactId:classifier

名稱

includes

類型

java.util.List

預設值

使用者屬性

spring-boot.includes

1.2.0

jvmArguments

應與用於執行應用程式的派生程序相關聯的 JVM 引數。在命令列上,請確保將多個值括在引號之間。

名稱

jvmArguments

類型

java.lang.String

預設值

使用者屬性

spring-boot.run.jvmArguments

1.1.0

mainClass

主類別的名稱。如果未指定,將使用找到的第一個包含「main」方法的已編譯類別。

名稱

mainClass

類型

java.lang.String

預設值

使用者屬性

spring-boot.run.main-class

1.0.0

noverify

標記代理程式需要 -noverify。

名稱

noverify

類型

布林值

預設值

使用者屬性

spring-boot.run.noverify

1.0.0

optimizedLaunch

是否應最佳化 JVM 的啟動。

名稱

optimizedLaunch

類型

布林值

預設值

true

使用者屬性

spring-boot.test-run.optimizedLaunch

profiles

要啟用的 Spring 設定檔。指定 'spring.profiles.active' 引數的便利快捷方式。在命令列上,使用逗號分隔多個設定檔。

名稱

profiles

類型

java.lang.String[]

預設值

使用者屬性

spring-boot.run.profiles

1.3.0

skip

略過執行。

名稱

skip

類型

布林值

預設值

false

使用者屬性

spring-boot.run.skip

1.3.2

systemPropertyVariables

要傳遞至程序的 JVM 系統屬性清單。

名稱

systemPropertyVariables

類型

java.util.Map

預設值

使用者屬性

2.1.0

testClassesDirectory

包含應用程式應執行之測試類別和資源檔案的目錄。

名稱

testClassesDirectory

類型

java.io.File

預設值

${project.build.testOutputDirectory}

使用者屬性

workingDirectory

要用於應用程式的目前工作目錄。如果未指定,將使用 basedir。

名稱

workingDirectory

類型

java.io.File

預設值

使用者屬性

spring-boot.run.workingDirectory

1.5.0

範例

偵錯應用程式

runtest-run 目標在派生的程序中執行您的應用程式。如果您需要偵錯它,您應該新增必要的 JVM 引數以啟用遠端偵錯。以下組態會暫停程序,直到偵錯工具在連接埠 5005 上加入

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<jvmArguments>
						-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005
					</jvmArguments>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

這些引數也可以在命令列上指定

$ mvn spring-boot:run -Dspring-boot.run.jvmArguments=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005

使用系統屬性

系統屬性可以使用 systemPropertyVariables 屬性指定。以下範例將 property1 設定為 test,將 property2 設定為 42

<project>
	<build>
		<properties>
			<my.value>42</my.value>
		</properties>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<systemPropertyVariables>
						<property1>test</property1>
						<property2>${my.value}</property2>
					</systemPropertyVariables>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

如果值為空或未定義(即 <my-property/>),則系統屬性會設定為空字串作為值。Maven 會修剪在 pom 中指定的值,因此無法透過此機制指定需要以空格開頭或結尾的系統屬性:請考慮改用 jvmArguments

任何字串類型 Maven 變數都可以作為系統屬性傳遞。任何嘗試傳遞任何其他 Maven 變數類型(例如 ListURL 變數)都會導致變數運算式以字面方式傳遞(未評估)。

jvmArguments 參數優先於使用上述機制定義的系統屬性。在以下範例中,property1 的值為 overridden

$ mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dproperty1=overridden"

使用環境變數

環境變數可以使用 environmentVariables 屬性指定。以下範例設定了 'ENV1'、'ENV2'、'ENV3'、'ENV4' 環境變數

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<environmentVariables>
						<ENV1>5000</ENV1>
						<ENV2>Some Text</ENV2>
						<ENV3/>
						<ENV4></ENV4>
					</environmentVariables>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

如果值為空或未定義(即 <MY_ENV/>),則環境變數會設定為空字串作為值。Maven 會修剪在 pom 中指定的值,因此無法指定需要以空格開頭或結尾的環境變數。

任何字串類型 Maven 變數都可以作為系統屬性傳遞。任何嘗試傳遞任何其他 Maven 變數類型(例如 ListURL 變數)都會導致變數運算式以字面方式傳遞(未評估)。

以這種方式定義的環境變數優先於現有值。

使用應用程式引數

應用程式引數可以使用 arguments 屬性指定。以下範例設定了兩個引數:property1property2=42

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<arguments>
						<argument>property1</argument>
						<argument>property2=${my.value}</argument>
					</arguments>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

在命令列上,引數以空格分隔,與 jvmArguments 的方式相同。如果引數包含空格,請務必用引號括起來。在以下範例中,有兩個引數可用:property1property2=Hello World

$ mvn spring-boot:run -Dspring-boot.run.arguments="property1 'property2=Hello World'"

指定活動設定檔

可以使用 profiles 引數指定要用於特定應用程式的活動設定檔。

以下組態啟用 localdev 設定檔

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<profiles>
						<profile>local</profile>
						<profile>dev</profile>
					</profiles>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

要啟用的設定檔也可以在命令列上指定,請確保以逗號分隔它們,如下列範例所示

$ mvn spring-boot:run -Dspring-boot.run.profiles=local,dev