spring-boot 如何引入同一个包多个版本

2021-11-03 18:38:49 +08:00
 liuxu
maven 管理,项目依赖有一个包 a:v1 ,现在引入一个新包 b ,但是 b 依赖 a:v2 ,而且 a:v1 和 a:v2 不兼容,这种情况都是怎么处理的
2401 次点击
所在节点    Java
15 条回复
wolfie
2021-11-03 18:41:56 +08:00
只能看 v2 能不能兼容 v1 吧。
dcsuibian
2021-11-03 18:46:08 +08:00
maven-shade-plugin???
pelloz
2021-11-03 18:49:13 +08:00
将这个功能分开为两个项目...
xarthur
2021-11-03 18:52:00 +08:00
不懂为什么需要这种需求,感觉是个 XY 问题。
ic2y
2021-11-03 18:52:42 +08:00
maven-shade-plugin 对某个冲突包进行重命名
ic2y
2021-11-03 18:54:30 +08:00
maven-shade-plugin 对某个冲突包进行重命名;

或者,依赖某些公共库的不同版本共存,自己实现类加载器好了,分别自行加载不同版本的库。
renmu123
2021-11-03 19:16:21 +08:00
趁这个机会把 v1 升级到 v2
hand515
2021-11-03 19:17:00 +08:00
有源码好办,没有就麻烦
liuxu
2021-11-03 19:20:05 +08:00
@ic2y 多谢,我看看怎么整


@renmu123 目前是在升级到 v2 ,但是解决了一个问题却引出千千万万个问题,我看怎么搞
liuxu
2021-11-03 19:20:57 +08:00
@hand515 b 没有源码,正在从项目入手
realrojeralone
2021-11-03 20:49:58 +08:00
#2 正解,很多开源项目都会 shade 其他项目,以避免 jar 包冲突( guava 和 netty 应该是被 shade 最多的了)
kingfalse
2021-11-04 07:36:30 +08:00
自己 new 一个 classloader ,别说不同版本的 jar 包了,就是你在 spring boot 里面再启动一个 spring boot 都可以
Bronya
2021-11-04 08:49:41 +08:00
遇到过这个问题,方案是改名,不过用的 jarjar.jar 进行的改名
过程我记录在这里了 https://www.cnblogs.com/lixin-link/p/15362918.html ,你可以试试。
Bronya
2021-11-04 10:15:10 +08:00
我刚才试了下,用 maven-shade-plugin 比用 jarjar.jar 方便的多,推荐使用!
Bromine0x23
2021-11-04 10:20:37 +08:00
感觉只能 shade 一个新包出来。
有遇到过这种场景,库的 groupId 和 artifactId 没变,但是实际的 package 变了,两个版本实际能共存,但是 Maven 中无法同时导入。(不过忘了是哪个库,也忘了咋解决的了)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/812817

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX