使用 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` 目錄都將在您執行應用程式時新增到應用程式類路徑中,並且類輸出中發現的任何重複項都將被刪除。這允許資源的即時重新整理,這在開發 Web 應用程式時非常有用。例如,您可以處理 HTML、CSS 或 JavaScript 檔案,並立即檢視更改,而無需重新編譯應用程式。它也是一種幫助前端開發人員工作而無需下載和安裝 Java IDE 的有用方法。
| 使用此功能的副作用是構建時資源的過濾將不起作用。 |
為了與 `repackage` 目標保持一致,`run` 目標以這樣一種方式構建類路徑:外掛配置中排除的任何依賴項也從類路徑中排除。有關更多詳細資訊,請參閱專用示例。
有時執行應用程式的測試變體很有用。例如,如果您想在開發時使用 Testcontainers 或使用一些測試存根。為此,請使用 `test-run` 目標,它具有與 `run` 許多相同的功能和配置選項。
`spring-boot:run`
org.springframework.boot:spring-boot-maven-plugin:4.0.0
就地執行應用程式。
可選引數
| 名稱 | 型別 | 預設值 |
|---|---|---|
|
|
|
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
引數詳情
`addResources`
直接將 Maven 資源新增到類路徑中,這允許資源的即時就地編輯。從 `target/classes` 中刪除重複資源,以防止在呼叫 `ClassLoader.getResources()` 時它們出現兩次。請考慮將 `spring-boot-devtools` 新增到您的專案中,因為它提供了此功能以及更多功能。
名稱 |
|
|---|---|
型別 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
`additionalClasspathElements`
應新增到類路徑的額外類路徑元素。一個元素可以是包含類和資源的目錄或一個 jar 檔案。
名稱 |
|
|---|---|
型別 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
`classesDirectory`
包含應用於執行應用程式的類和資原始檔的目錄。
名稱 |
|
|---|---|
型別 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
`commandlineArguments`
應傳遞給應用程式的命令列引數。使用空格分隔多個引數,並確保將多個值用引號括起來。指定時,優先於 `#arguments`。
名稱 |
|
|---|---|
型別 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
`environmentVariables`
應與用於執行應用程式的派生程序關聯的環境變數列表。
名稱 |
|
|---|---|
型別 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
`excludeGroupIds`
要排除的 groupId 名稱的逗號分隔列表(精確匹配)。
名稱 |
|
|---|---|
型別 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
`excludes`
要排除的 artifact 定義集合。Exclude 元素定義了強制的 groupId 和 artifactId 元件以及可選的 classifier 元件。當配置為屬性時,值應以逗號分隔,元件以冒號分隔:groupId:artifactId,groupId:artifactId:classifier
名稱 |
|
|---|---|
型別 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
`includes`
要包含的 artifact 定義集合。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:4.0.0
使用測試執行時類路徑就地執行應用程式。用於啟動應用程式的主類確定如下:如果已配置主類,則使用該主類。然後,如果測試類目錄中存在主類,則使用該主類。然後,如果類目錄中存在主類,則使用該主類。
可選引數
| 名稱 | 型別 | 預設值 |
|---|---|---|
|
|
|
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
|
|
|
||
|
|
|
|
||
|
引數詳情
`addResources`
直接將 Maven 資源新增到類路徑中,這允許資源的即時就地編輯。從 `target/classes` 中刪除重複資源,以防止在呼叫 `ClassLoader.getResources()` 時它們出現兩次。請考慮將 `spring-boot-devtools` 新增到您的專案中,因為它提供了此功能以及更多功能。
名稱 |
|
|---|---|
型別 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
`additionalClasspathElements`
應新增到類路徑的額外類路徑元素。一個元素可以是包含類和資源的目錄或一個 jar 檔案。
名稱 |
|
|---|---|
型別 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
`classesDirectory`
包含應用於執行應用程式的類和資原始檔的目錄。
名稱 |
|
|---|---|
型別 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
`commandlineArguments`
應傳遞給應用程式的命令列引數。使用空格分隔多個引數,並確保將多個值用引號括起來。指定時,優先於 `#arguments`。
名稱 |
|
|---|---|
型別 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
`environmentVariables`
應與用於執行應用程式的派生程序關聯的環境變數列表。
名稱 |
|
|---|---|
型別 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
`excludeGroupIds`
要排除的 groupId 名稱的逗號分隔列表(精確匹配)。
名稱 |
|
|---|---|
型別 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
`excludes`
要排除的 artifact 定義集合。Exclude 元素定義了強制的 groupId 和 artifactId 元件以及可選的 classifier 元件。當配置為屬性時,值應以逗號分隔,元件以冒號分隔:groupId:artifactId,groupId:artifactId:classifier
名稱 |
|
|---|---|
型別 |
|
預設值 |
|
使用者屬性 |
|
自 |
|
`includes`
要包含的 artifact 定義集合。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