使用更高版本覆盖 Spring Boot BOM 策划的依赖项

Mad*_*jha 4 maven-3 spring-boot

Spring Boot 文档建议您在实践中大多数情况下不需要覆盖 BOM 依赖项。

因为有一些规定可以覆盖依赖关系。场景 :: 在父 pom 中声明:

<dependencyManagement>
    <dependencies>
     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.1.4</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
Run Code Online (Sandbox Code Playgroud)

在子 pom 中声明

 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

用更高版本覆盖 spring-boot-starter-data-mongodb 是否正确/最佳实践让我们说 spring boot 2.1.4 是 2.2.1

我的看法是用降级版本覆盖理论上似乎没问题,但升级到更高版本可能会引发问题。

此外,尽管覆盖了父 pom 中的声明,被覆盖依赖项的依赖项仍然按照 BOM 声明。

<dependencyManagement>
    <dependencies>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-mongodb</artifactId>
      <version>2.2.1.RELEASE</version>
    </dependency>
     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.1.4</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
Run Code Online (Sandbox Code Playgroud)

Jos*_*nez 6

我认为这样做有风险,但有时又不得不这样做。您或团队必须权衡利弊。以下是一些可能导致依赖项版本提前于 BOM 的情况。

  • 安全。有时,依赖项存在 CVE 漏洞。安全扫描可能会发现这一点并阻止您的应用程序被部署。
  • 新的必需功能。较新版本的依赖项可能具有您的软件所需的功能。
  • 错误修复。较新版本的依赖项可能修复了错误。

执行此操作之前需要考虑的事项:

  • 首先考虑升级 BOM。可能的情况是,BOM 具有具有所需依赖项版本的较新版本。
  • 如果您选择升级 BOM,这实际上可能会对您的应用程序产生更大的影响,因为它将导致多个依赖项被升级。
  • 测试、测试、更多测试。无论您是进行依赖项升级还是 BOM 升级,测试都是您最好的朋友。凭借良好的测试覆盖率,您可以自信地前进。当您考虑如何快速且自信地升级依赖项时,进行出色的测试会带来惊人的投资回报率。
  • 与功能版本相比,升级错误版本的风险较小。基本上,如果依赖项的版本仅升级版本中的第三个数字(版本 xyz 中的“z”),则其风险比第二个数字要小。