使用 Spring Boot BOM 替代 Parent 的方法

使用 Spring Boot BOM 替代 Parent 的方法

本文档旨在指导开发者如何在maven项目中利用Bill of Materials (bom) 来管理依赖,以替代传统的继承 spring Boot Parent POM 的方式。我们将深入探讨BOM的配置和使用,并提供一个实际案例,帮助您解决依赖管理中的常见问题,确保项目能够正确下载和使用所需的依赖项。

理解 Maven BOM (Bill of Materials)

Maven BOM (Bill of Materials) 是一种特殊的 POM 文件,它定义了一组依赖项的版本信息,但不引入实际的依赖。通过在 dependencyManagement 节中导入 BOM,您可以集中管理项目的依赖版本,避免版本冲突,并简化依赖声明。使用BOM,你无需为每个依赖显式指定版本,Maven 会自动从 BOM 中获取。

如何使用 spring boot BOM

要使用 Spring Boot BOM 替代 parent POM,你需要执行以下步骤:

  1. 移除 parent POM: 从 pom.xml 文件中移除 <parent> 标签。

  2. 添加 BOM 依赖: 在 dependencyManagement 节中,添加 Spring Boot BOM 作为依赖项,并设置 scope 为 import 和 type 为 pom。

    <dependencyManagement>     <dependencies>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-dependencies</artifactId>             <version>${spring-boot.version}</version>             <type>pom</type>             <scope>import</scope>         </dependency>     </dependencies> </dependencyManagement>
  3. 声明依赖: 在 dependencies 节中,声明你需要的 Spring Boot 依赖项,无需指定版本。Maven 会自动从 Spring Boot BOM 中解析版本。

    使用 Spring Boot BOM 替代 Parent 的方法

    法语写作助手

    法语助手旗下的ai智能写作平台,支持语法、拼写自动纠错,一键改写、润色你的法语作文。

    使用 Spring Boot BOM 替代 Parent 的方法31

    查看详情 使用 Spring Boot BOM 替代 Parent 的方法

    <dependencies>     <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-web</artifactId>     </dependency> </dependencies>

示例:使用 Spring Boot BOM 的 pom.xml 文件

下面是一个完整的 pom.xml 文件的示例,展示了如何使用 Spring Boot BOM 来管理依赖:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>      <groupId>org.example</groupId>     <artifactId>bom-experiments</artifactId>     <version>1.0-SNAPSHOT</version>      <properties>         <maven.compiler.source>11</maven.compiler.source>         <maven.compiler.target>11</maven.compiler.target>         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>         <junit-jupiter.version>5.7.2</junit-jupiter.version>         <aws-sdk.version>2.18.16</aws-sdk.version>         <mockito-inline.version>4.8.0</mockito-inline.version>         <org.springframework.boot.version>2.7.5</org.springframework.boot.version>         <org.springframework.version>5.3.24</org.springframework.version>          <lombok.version>1.18.24</lombok.version>         <maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version>         <maven-surefire-plugin.version>3.0.0-M7</maven-surefire-plugin.version>         <junit-jupiter-params.version>${junit-jupiter.version}</junit-jupiter.version>         <kubernetes-maven-plugin.version>1.9.0</kubernetes-maven-plugin.version>          <!-- Plugins -->         <mockito.version>4.9.0</mockito.version>     </properties>      <dependencyManagement>         <dependencies>             <dependency>                 <groupId>org.springframework</groupId>                 <artifactId>spring-framework-bom</artifactId>                 <version>${org.springframework.version}</version>                 <type>pom</type>                 <scope>import</scope>             </dependency>             <dependency>                 <groupId>org.springframework.boot</groupId>                 <artifactId>spring-boot-dependencies</artifactId>                 <version>${org.springframework.boot.version}</version>                 <type>pom</type>                 <scope>import</scope>             </dependency>             <dependency>                 <groupId>software.amazon.awssdk</groupId>                 <artifactId>bom</artifactId>                 <version>${aws-sdk.version}</version>                 <type>pom</type>                 <scope>import</scope>             </dependency>             <dependency>                 <groupId>org.junit</groupId>                 <artifactId>junit-bom</artifactId>                 <version>${junit-jupiter.version}</version>                 <type>pom</type>                 <scope>import</scope>             </dependency>             <dependency>                 <groupId>org.mockito</groupId>                 <artifactId>mockito-bom</artifactId>                 <version>${mockito.version}</version>                 <type>pom</type>                 <scope>import</scope>             </dependency>         </dependencies>     </dependencyManagement>      <dependencies>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-web</artifactId>         </dependency>          <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-actuator</artifactId>         </dependency>          <!-- Secret managers -->         <dependency>             <groupId>software.amazon.awssdk</groupId>             <artifactId>secretsmanager</artifactId>         </dependency>          <dependency>             <groupId>software.amazon.awssdk</groupId>             <artifactId>ssm</artifactId>         </dependency>          <dependency>             <groupId>software.amazon.awssdk</groupId>             <artifactId>sts</artifactId>         </dependency>           <!-- Lombok -->         <dependency>             <groupId>org.projectlombok</groupId>             <artifactId>lombok</artifactId>             <version>${lombok.version}</version>             <scope>provided</scope>         </dependency>          <!-- Testing -->         <dependency>             <groupId>org.junit.jupiter</groupId>             <artifactId>junit-jupiter-engine</artifactId>             <scope>test</scope>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-test</artifactId>             <scope>test</scope>         </dependency>         <dependency>             <groupId>org.mockito</groupId>             <artifactId>mockito-inline</artifactId>             <scope>test</scope>         </dependency>         <dependency>             <groupId>org.mockito</groupId>             <artifactId>mockito-junit-jupiter</artifactId>             <scope>test</scope>         </dependency>         <dependency>             <groupId>org.junit.jupiter</groupId>             <artifactId>junit-jupiter-params</artifactId>             <scope>test</scope>         </dependency>         <dependency>             <groupId>org.junit.jupiter</groupId>             <artifactId>junit-jupiter-api</artifactId>             <scope>test</scope>         </dependency>     </dependencies>      <build>         <finalName>bom-experiments</finalName>         <sourceDirectory>${project.basedir}/src/main</sourceDirectory>         <testSourceDirectory>${project.basedir}/src/test</testSourceDirectory>         <plugins>             <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-surefire-plugin</artifactId>                 <version>${maven-surefire-plugin.version}</version>             </plugin>              <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-compiler-plugin</artifactId>                 <version>${maven-compiler-plugin.version}</version>             </plugin>             <plugin>                 <groupId>org.springframework.boot</groupId>                 <artifactId>spring-boot-maven-plugin</artifactId>                 <version>${org.springframework.boot.version}</version>             </plugin>         </plugins>     </build>  </project>

注意:

  • 确保 spring-boot.version 属性与你想要使用的 Spring Boot 版本一致。
  • <sourceDirectory> 必须指向正确的源代码目录,通常是 ${project.basedir}/src/main。如果指向错误的位置,会导致编译错误

解决依赖未下载的问题

如果在添加 BOM 后,仍然遇到依赖未正确下载的问题,可以尝试以下方法:

  1. 检查 dependencyManagement 配置: 确保 BOM 依赖项的 type 设置为 pom,scope 设置为 import。
  2. 清理和重新构建项目: 运行 mvn clean install 命令清理项目并重新构建。
  3. 检查 Maven 仓库: 确保 Maven 能够访问所需的仓库,并且依赖项已存在于仓库中。
  4. 检查 IDE 配置: 确保你的 IDE (如 IntelliJ ideaeclipse) 已正确配置 Maven,并且能够解析依赖项。

总结

使用 Spring Boot BOM 可以有效地管理项目的依赖版本,避免版本冲突,并简化依赖声明。通过正确配置 dependencyManagement 节,并确保源代码目录设置正确,你可以成功地使用 BOM 替代 parent POM。如果在使用过程中遇到问题,请仔细检查配置,并尝试清理和重新构建项目。

暂无评论

发送评论 编辑评论


				
上一篇
下一篇
text=ZqhQzanResources