maven 管理,项目依赖有一个包 a:v1 ,现在引入一个新包 b ,但是 b 依赖 a:v2 ,而且 a:v1 和 a:v2 不兼容,这种情况都是怎么处理的
1
wolfie Nov 3, 2021
只能看 v2 能不能兼容 v1 吧。
|
2
dcsuibian Nov 3, 2021 maven-shade-plugin???
|
3
pelloz Nov 3, 2021
将这个功能分开为两个项目...
|
4
xarthur Nov 3, 2021
不懂为什么需要这种需求,感觉是个 XY 问题。
|
5
ic2y Nov 3, 2021
maven-shade-plugin 对某个冲突包进行重命名
|
6
ic2y Nov 3, 2021 maven-shade-plugin 对某个冲突包进行重命名;
或者,依赖某些公共库的不同版本共存,自己实现类加载器好了,分别自行加载不同版本的库。 |
7
renmu123 Nov 3, 2021 via Android
趁这个机会把 v1 升级到 v2
|
8
Finest Nov 3, 2021 via Android
有源码好办,没有就麻烦
|
11
realrojeralone Nov 3, 2021
#2 正解,很多开源项目都会 shade 其他项目,以避免 jar 包冲突( guava 和 netty 应该是被 shade 最多的了)
|
12
kingfalse Nov 4, 2021 via Android 自己 new 一个 classloader ,别说不同版本的 jar 包了,就是你在 spring boot 里面再启动一个 spring boot 都可以
|
13
Bronya Nov 4, 2021
遇到过这个问题,方案是改名,不过用的 jarjar.jar 进行的改名
过程我记录在这里了 https://www.cnblogs.com/lixin-link/p/15362918.html ,你可以试试。 |
14
Bronya Nov 4, 2021 我刚才试了下,用 maven-shade-plugin 比用 jarjar.jar 方便的多,推荐使用!
|
15
Bromine0x23 Nov 4, 2021
感觉只能 shade 一个新包出来。
有遇到过这种场景,库的 groupId 和 artifactId 没变,但是实际的 package 变了,两个版本实际能共存,但是 Maven 中无法同时导入。(不过忘了是哪个库,也忘了咋解决的了) |