使用 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.3.5

在本地运行应用程序。

必需参数

名称 类型 默认值

classesDirectory

文件

${project.build.outputDirectory}

可选参数

名称 类型 默认值

addResources

布尔值

false

additionalClasspathElements

字符串数组

agents

文件数组

arguments

字符串数组

commandlineArguments

字符串

directories

字符串数组

environmentVariables

映射

excludeGroupIds

字符串

excludes

列表

includes

列表

jvmArguments

字符串

mainClass

字符串

noverify

布尔值

optimizedLaunch

布尔值

true

profiles

字符串数组

skip

布尔值

false

systemPropertyVariables

映射

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

映射

excludeGroupIds

字符串

excludes

列表

includes

列表

jvmArguments

字符串

mainClass

字符串

noverify

布尔值

optimizedLaunch

布尔值

true

profiles

字符串数组

skip

布尔值

false

systemPropertyVariables

映射

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