使用插件

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

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

  • UTF-8 源编码。

  • 使用 -parameters 进行编译。

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

  • 执行 repackage 目标,其执行 ID 为 repackage

  • 一个 native profile,配置构建以生成 Native image。

  • 合理的 资源过滤

  • 合理的插件配置 (Git Commit Id Pluginshade)。

  • 针对 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>4.0.0</version>
</parent>
你只需在此依赖项上指定 Spring Boot 版本号。如果你导入其他 starter,可以安全地省略版本号。

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

<properties>
	<slf4j.version>1.7.30</slf4j.version>
	<spring-data-bom.version>2024.1.10</spring-data-bom.version>
</properties>

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

每个 Spring Boot 版本都经过设计和测试,以应对一组特定的第三方依赖项。覆盖版本可能会导致兼容性问题,应谨慎操作。

不使用 Parent POM 的 Spring Boot

你可能有不继承 spring-boot-starter-parent 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>4.0.0</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

上述示例设置不允许你像前面解释的那样通过属性覆盖单个依赖项。要实现相同的结果,你需要在项目的 dependencyManagement 部分中,在 spring-boot-dependencies 条目之**前**添加条目。例如,要使用不同版本的 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-bom</artifactId>
			<version>2024.1.10</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-dependencies</artifactId>
			<version>4.0.0</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
© . This site is unofficial and not affiliated with VMware.