使用 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
就地執行應用程式。
選用參數
名稱 | 類型 | 預設值 |
---|---|---|
|
|
|
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
參數詳細資訊
addResources
直接將 Maven 資源新增至類別路徑,這允許資源的即時就地編輯。重複的資源會從 target/classes
中移除,以防止它們在呼叫 ClassLoader.getResources()
時出現兩次。請考慮將 spring-boot-devtools
新增至您的專案,因為它提供了此功能以及更多功能。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
additionalClasspathElements
應新增至類別路徑的其他類別路徑元素。元素可以是包含類別和資源的目錄或 jar 檔案。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
classesDirectory
包含應用程式應執行之類別和資源檔案的目錄。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
commandlineArguments
應傳遞至應用程式的命令列引數。使用空格分隔多個引數,並確保將多個值括在引號之間。指定時,優先於 #arguments
。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
directories
應新增至類別路徑的其他包含類別或資源的目錄。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
environmentVariables
應與用於執行應用程式的派生程序相關聯的環境變數清單。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
excludeGroupIds
要排除的 groupId 名稱的逗號分隔清單(完全符合)。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
excludes
要排除的構件定義集合。Exclude
元素定義了強制性的 groupId
和 artifactId
組件以及一個可選的 classifier
組件。當組態為屬性時,值應以逗號分隔,組件以冒號分隔:groupId:artifactId,groupId:artifactId:classifier
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
includes
要包含的構件定義集合。Include
元素定義了強制性的 groupId
和 artifactId
組件以及一個可選的 classifier
組件。當組態為屬性時,值應以逗號分隔,組件以冒號分隔:groupId:artifactId,groupId:artifactId:classifier
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
jvmArguments
應與用於執行應用程式的派生程序相關聯的 JVM 引數。在命令列上,請確保將多個值括在引號之間。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
mainClass
主類別的名稱。如果未指定,將使用找到的第一個包含「main」方法的已編譯類別。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
optimizedLaunch
是否應最佳化 JVM 的啟動。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
profiles
要啟用的 Spring 設定檔。指定 'spring.profiles.active' 引數的便利快捷方式。在命令列上,使用逗號分隔多個設定檔。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
systemPropertyVariables
要傳遞至程序的 JVM 系統屬性清單。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
spring-boot:test-run
org.springframework.boot:spring-boot-maven-plugin:3.3.5
使用測試執行階段類別路徑就地執行應用程式。將用於啟動應用程式的主類別判斷方式如下:已組態的主類別(如果有的話)。然後是在測試類別目錄中找到的主類別(如果有的話)。然後是在類別目錄中找到的主類別(如果有的話)。
選用參數
名稱 | 類型 | 預設值 |
---|---|---|
|
|
|
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
|
|
|
||
|
|
|
|
||
|
參數詳細資訊
addResources
直接將 Maven 資源新增至類別路徑,這允許資源的即時就地編輯。重複的資源會從 target/classes
中移除,以防止它們在呼叫 ClassLoader.getResources()
時出現兩次。請考慮將 spring-boot-devtools
新增至您的專案,因為它提供了此功能以及更多功能。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
additionalClasspathElements
應新增至類別路徑的其他類別路徑元素。元素可以是包含類別和資源的目錄或 jar 檔案。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
classesDirectory
包含應用程式應執行之類別和資源檔案的目錄。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
commandlineArguments
應傳遞至應用程式的命令列引數。使用空格分隔多個引數,並確保將多個值括在引號之間。指定時,優先於 #arguments
。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
directories
應新增至類別路徑的其他包含類別或資源的目錄。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
environmentVariables
應與用於執行應用程式的派生程序相關聯的環境變數清單。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
excludeGroupIds
要排除的 groupId 名稱的逗號分隔清單(完全符合)。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
excludes
要排除的構件定義集合。Exclude
元素定義了強制性的 groupId
和 artifactId
組件以及一個可選的 classifier
組件。當組態為屬性時,值應以逗號分隔,組件以冒號分隔:groupId:artifactId,groupId:artifactId:classifier
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
includes
要包含的構件定義集合。Include
元素定義了強制性的 groupId
和 artifactId
組件以及一個可選的 classifier
組件。當組態為屬性時,值應以逗號分隔,組件以冒號分隔:groupId:artifactId,groupId:artifactId:classifier
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
jvmArguments
應與用於執行應用程式的派生程序相關聯的 JVM 引數。在命令列上,請確保將多個值括在引號之間。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
mainClass
主類別的名稱。如果未指定,將使用找到的第一個包含「main」方法的已編譯類別。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
optimizedLaunch
是否應最佳化 JVM 的啟動。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
profiles
要啟用的 Spring 設定檔。指定 'spring.profiles.active' 引數的便利快捷方式。在命令列上,使用逗號分隔多個設定檔。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
systemPropertyVariables
要傳遞至程序的 JVM 系統屬性清單。
名稱 |
|
---|---|
類型 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
範例
偵錯應用程式
run
和 test-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 變數類型(例如 List
或 URL
變數)都會導致變數運算式以字面方式傳遞(未評估)。
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 變數類型(例如 List
或 URL
變數)都會導致變數運算式以字面方式傳遞(未評估)。
以這種方式定義的環境變數優先於現有值。
使用應用程式引數
應用程式引數可以使用 arguments
屬性指定。以下範例設定了兩個引數:property1
和 property2=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
的方式相同。如果引數包含空格,請務必用引號括起來。在以下範例中,有兩個引數可用:property1
和 property2=Hello World
$ mvn spring-boot:run -Dspring-boot.run.arguments="property1 'property2=Hello World'"
指定活動設定檔
可以使用 profiles
引數指定要用於特定應用程式的活動設定檔。
以下組態啟用 local
和 dev
設定檔
<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