使用更高版本覆盖 spring 引导 BOM 策划的依赖项

Overriding spring boot BOM curated dependency with higher version

Spring 引导文档建议您实际上不需要覆盖 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>

在子 pom 中声明

 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>

是否right/best练习覆盖spring-boot-starter-data-mongodb 更高版本可以说 2.2.1 for spring boot 2.1.4

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

此外,尽管覆盖了父 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>

我认为这样做有风险,但有时不得不这样做。您或团队必须权衡 pros/cons。以下是一些可能导致在 BOM 之前推进依赖项版本的情况。

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

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

  • 考虑先升级BOM。可能是 BOM 具有具有所需依赖项版本的较新版本。
  • 如果您采用升级 BOM 的方式,这实际上可能会对您的应用程序产生更大的影响,因为它会导致多个依赖项被升级。
  • 测试、测试和更多测试。无论您是进行依赖升级还是 BOM 升级,测试都是您最好的朋友。有了良好的测试覆盖率,您就可以自信地向前迈进。当您考虑如何快速和自信地升级依赖项时,进行出色的测试会带来惊人的投资回报率。
  • 与功能版本相比,升级错误版本风险更小。基本上,如果依赖项的版本仅升级版本中的第三个数字(版本 x.y.z 中的 'z'),则它的风险低于第二个。