起因
在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> 排除旧版本,再显式引入新版本。 |
最严格的控制,确保构建时不会引入冲突的旧版本,但配置稍显繁琐。 |