1
izhangzhihao 2020-07-31 17:40:37 +08:00
maven shade plugin
|
2
cco 2020-07-31 17:56:24 +08:00
1 楼的办法可以尝试,我最近也刚升级到 7.8,不过我直接丢弃了低版本的东西。
|
3
pkwenda OP @izhangzhihao #1
@cco #2 maven shade plugin 小弟昨天在 elastic 社区看到了,貌似他解决的是:比如 es 引用了 guava,与自己的 guava 冲突,可以抛弃 es 的 guava 用自己的。可以搞定版本共存的问题吗?我还简单跑了一下。 |
4
pkwenda OP |
5
Umenezumi 2020-07-31 18:50:24 +08:00 1
up
|
6
SoloCompany 2020-07-31 18:59:15 +08:00 via iPhone
可以把旧版本的 jar 打包到 META-INF 然后自己写 classloder,避免须以手工处理执行命令参数依赖的问题
|
7
daiwenzh5 2021-03-22 23:20:39 +08:00
@SoloCompany 我今天也遇到相同的需求了,使用 shade 并不能很好的解决,使用的是 jarjar.jar 。但是它具体怎么实现的,我并没有看源码,相比较而言,前两个是黑盒操作,没有类加载器清晰,但是类加载器通过反射执行,如果需要显式的声明其中的对象怎么办?比如 SDK 中的 xxxRequest 对象,和 xxxResponse 对象。具体该怎么操作呢?
|
8
SoloCompany 2021-03-22 23:28:21 +08:00
@daiwenzh5 #7 所有依赖到特殊版本的代码, 如果 API 兼容, 那么只需使用同样的 ClassLoader load 就能实现封装, 如果 API 不兼容, 那么依赖的代码要和特殊版本的 lib 一起编译然后再通过别的 API 把业务逻辑暴露出来给上层调用, 当然也可以选择不封装那就只能使用反射的方式
|