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

在本地运行应用程序。

必需参数

名称 类型 默认值

classesDirectory

文件

${project.build.outputDirectory}

可选参数

名称 类型 默认值

addResources

布尔值

false

additionalClasspathElements

String[]

agents

File[]

arguments

String[]

commandlineArguments

String

directories

String[]

environmentVariables

Map

excludeGroupIds

String

excludes

List

includes

List

jvmArguments

String

mainClass

String

noverify

布尔值

optimizedLaunch

布尔值

true

profiles

String[]

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.0

使用测试运行时类路径在本地运行应用程序。用于启动应用程序的主类确定如下:已配置的主类(如果有)。然后是测试类目录中找到的主类(如果有)。然后是类目录中找到的主类(如果有)。

必需参数

名称 类型 默认值

classesDirectory

文件

${project.build.outputDirectory}

testClassesDirectory

文件

${project.build.testOutputDirectory}

可选参数

名称 类型 默认值

addResources

布尔值

false

additionalClasspathElements

String[]

agents

File[]

arguments

String[]

commandlineArguments

String

directories

String[]

environmentVariables

Map

excludeGroupIds

String

excludes

List

includes

List

jvmArguments

String

mainClass

String

noverify

布尔值

optimizedLaunch

布尔值

true

profiles

String[]

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