|
如需获取最新稳定版本,请使用 Spring Boot 4.0.4! |
使用 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:3.5.12
原地运行应用程序。
可选参数
| 名称 | 类型 | 默认 |
|---|---|---|
|
|
|
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
参数详情
addResources
将 Maven 资源直接添加到类路径中,这样可以对资源进行实时原地编辑。重复的资源会从 target/classes 中移除,以防止在调用 ClassLoader.getResources() 时它们出现两次。请考虑改为向您的项目添加 spring-boot-devtools,因为它提供了此功能以及更多其他功能。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
自从 |
|
additionalClasspathElements
应添加到类路径中的其他类路径元素。元素可以是包含类和资源的目录,也可以是 jar 文件。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
自从 |
|
classesDirectory
包含用于运行应用程序的类和资源文件的目录。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
自从 |
|
commandlineArguments
应从命令行传递给应用程序的参数。使用空格分隔多个参数,并确保将多个值用引号括起来。指定时,优先于 #arguments。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
自从 |
|
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.5.12
使用测试运行时类路径原地运行应用程序。用于启动应用程序的主类按以下顺序确定:已配置的主类(如果有);然后是测试类目录中找到的主类(如果有);最后是类目录中找到的主类(如果有)。
可选参数
| 名称 | 类型 | 默认 |
|---|---|---|
|
|
|
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
|
|
|
||
|
|
|
|
||
|
参数详情
addResources
将 Maven 资源直接添加到类路径中,这样可以对资源进行实时原地编辑。重复的资源会从 target/classes 中移除,以防止在调用 ClassLoader.getResources() 时它们出现两次。请考虑改为向您的项目添加 spring-boot-devtools,因为它提供了此功能以及更多其他功能。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
自从 |
|
additionalClasspathElements
应添加到类路径中的其他类路径元素。元素可以是包含类和资源的目录,也可以是 jar 文件。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
自从 |
|
classesDirectory
包含用于运行应用程序的类和资源文件的目录。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
自从 |
|
commandlineArguments
应从命令行传递给应用程序的参数。使用空格分隔多个参数,并确保将多个值用引号括起来。指定时,优先于 #arguments。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
自从 |
|
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。
任何 String 类型的 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 中指定的值,因此无法指定需要以空格开头或结尾的环境变量。
任何 String 类型的 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