统一管理第三方包的依赖包版本号


起因

在java项目中,我在maven的pom.xml中引用了io.github.officiallysingh:spring-boot-starter-spark:1.3包,然后这个包里又有org.apache.spark:spark-core_2.13:3.5.5包的引用,而在spark-core_2.13包中又引用了org.apache.avro:avro-mapred:1.11.4包,这个包的版本0.10.0修改为0.9.0,我们如何实现呢?

推荐方法

  • 通过在dependencyManagement中声明三方包的版本,来在自己项目中,将所有指定包的版本进行统一,并且包版本不同产生的冲突

在当前项目的pom.xml中添加代码

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot-dependencies.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.avro</groupId>
            <artifactId>avro-mapred</artifactId>
            <version>1.11.3</version>
        </dependency>
</dependencyManagement>

刷新依赖之后,可以看到三方包里的依赖包avro-mapred版本已经改变了

其它方法

下面这个表格总结了你可以在项目中使用的三种主要策略。

方法 操作方式 适用场景与说明
直接声明依赖 <dependencies> 中直接声明你想要的 jersey-client 版本。 最简洁直接,适用于单模块项目,快速覆盖传递依赖的版本。
依赖管理 <dependencyManagement> 中统一管理 jersey-client 的版本。 推荐用于多模块项目,可以保证所有模块使用的版本一致,避免冲突。
️ 排除+引入 先通过 <exclusions> 排除旧版本,再显式引入新版本。 最严格的控制,确保构建时不会引入冲突的旧版本,但配置稍显繁琐。