使用该插件

Maven用户可以通过继承 spring-boot-starter-parent 项目来获得合理的默认配置。 父项目提供以下特性:

  • 默认编译级别为Java 17。

  • UTF-8源码编码。

  • 使用 -parameters 进行编译。

  • 依赖管理部分,继承自 spring-boot-dependencies POM,用于管理常用依赖的版本。 这种依赖管理让你在自己的POM中使用这些依赖时可以省略 <version> 标签。

  • 执行 repackage`目标,并带有 `repackage 执行id。

  • 一个 native profile,用于配置构建以生成Native镜像。

  • 合理的 资源过滤

  • 合理的插件配置( Git commit ID,以及 shade)。

  • application.properties`和`application.yml 的合理资源过滤,包括profile专用文件(如 application-dev.propertiesapplication-dev.yml

由于 application.propertiesapplication.yml 文件支持Spring风格占位符( ${…​} ),Maven过滤被改为使用 @..@ 占位符。 (你可以通过设置名为 resource.delimiter 的Maven属性来覆盖此行为。)

spring-boot-starter-parent 设置了 maven.compiler.release 属性,这会限制 --add-exports--add-reads--patch-module 选项 如果它们修改系统模块。 如需使用这些选项,请取消设置 maven.compiler.release

<maven.compiler.release></maven.compiler.release>

然后分别配置source和target选项:

<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>

继承Starter Parent POM

要配置你的项目继承 spring-boot-starter-parent ,请如下设置 parent

<!-- 从Spring Boot继承默认配置 -->
<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>3.5.0</version>
</parent>
你只需在该依赖上指定Spring Boot版本号。 如果引入了其他starter,可以安全地省略版本号。

这样配置后,你还可以通过在自己的项目中覆盖属性来覆盖单独的依赖。 例如,要使用不同版本的SLF4J库和Spring Data发布列车,可在`pom.xml`中添加如下内容:

<properties>
	<slf4j.version>1.7.30</slf4j.version>
	<spring-data-releasetrain.version>Moore-SR6</spring-data-releasetrain.version>
</properties>

浏览Spring Boot参考文档的 依赖版本属性部分,获取完整的依赖版本属性列表。

不使用Parent POM的Spring Boot用法

你可能有理由不继承 spring-boot-starter-parent POM。 比如你需要使用自己的公司标准父POM,或者你更喜欢显式声明所有Maven配置。

如果你不想使用 spring-boot-starter-parent,仍可通过使用 import 范围的依赖来保留依赖管理(但不包括插件管理),如下所示:

<dependencyManagement>
	<dependencies>
		<dependency>
			<!-- Import dependency management from Spring Boot -->
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-dependencies</artifactId>
			<version>3.5.0</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

上述示例配置无法通过属性覆盖单独依赖,如前所述。 要实现同样的效果,你需要在 spring-boot-dependencies 条目之前,在项目的 dependencyManagement 部分添加条目。 例如,要使用不同版本的SLF4J库和Spring Data发布列车,可在 pom.xml 中添加如下元素:

<dependencyManagement>
	<dependencies>
		<!-- Override SLF4J provided by Spring Boot -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.30</version>
		</dependency>
		<!-- Override Spring Data release train provided by Spring Boot -->
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-releasetrain</artifactId>
			<version>2020.0.0-SR1</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-dependencies</artifactId>
			<version>3.5.0</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

命令行覆盖设置

该插件提供了许多以 spring-boot 开头的用户属性,允许你通过命令行自定义配置。

例如,你可以如下调整运行应用时要启用的profiles:

$ mvn spring-boot:run -Dspring-boot.run.profiles=dev,local

如果你既想有默认值又允许命令行覆盖,应结合用户提供的项目属性和MOJO配置:

<project>
	<properties>
		<app.profiles>local,dev</app.profiles>
	</properties>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<profiles>${app.profiles}</profiles>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

上述配置确保默认启用 localdev 。 现在已暴露了专用属性,也可通过命令行覆盖:

$ mvn spring-boot:run -Dapp.profiles=test