使用插件

Maven 用户可以继承自spring-boot-starter-parent项目以获得合理的默认值。父项目提供以下功能:

  • 将 Java 17 作为默认编译级别。

  • UTF-8 源编码。

  • 使用-parameters进行编译。

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

  • 使用repackage执行 ID 执行repackage目标

  • 一个native配置文件,用于配置构建以能够生成原生镜像。

  • 合理的资源过滤

  • 合理的插件配置(Git commit IDshade)。

  • 针对application.propertiesapplication.yml文件(包括特定配置文件,例如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>

然后配置源选项和目标选项。

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

继承Starter Parent POM

要将您的项目配置为继承自spring-boot-starter-parent,请按如下方式设置parent

<!-- Inherit defaults from Spring Boot -->
<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>3.3.5</version>
</parent>
您只需要在此依赖项中指定Spring Boot版本号。如果您导入其他启动器,则可以安全地省略版本号。

通过此设置,您还可以通过覆盖您自己项目中的属性来覆盖单个依赖项。例如,要使用不同版本的 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.3.5</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.3.5</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

在命令行上覆盖设置

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

例如,您可以调整在运行应用程序时启用的配置文件,如下所示:

$ 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