跳到主要内容
版本:4.0.2

使用插件

QWen Max 中英对照 Using the Plugin

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

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

  • 源代码使用 UTF-8 编码。

  • 使用 -parameters 进行编译。

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

  • 一个 ID 为 repackagerepackage goal 执行。

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

  • 合理的 资源过滤

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

  • application.propertiesapplication.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

<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.2</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。你可能需要使用自己公司的标准父 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.2</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.2</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