背景:项目的jar包升级,使用某为的扫描工具扫描出了一堆问题:
拿到cve去查询了一下,具体的jar的版本是找到了,但是呢有个问题就是 项目的依赖太混乱了
一个spring-aop 在一个工程的直接或者间接引用就高达9处
个人的想法呢是直接把这些依赖全部都剔除掉
然后直接引入最新的依赖(修复了缺陷的版本)
这样做有两个问题:
1大动干戈,为了一个子依赖,或者孙依赖 项目里面加入大量的exclusion代码阅读性差
2.适配性引发的问题,spring-data-jpa引入了spring-aop,如果把spring-aop升级到高版本可能与当前版本的spring-data-jpa不适配
请问友友们有遇到过类似问题的吗,求赐教
这种问题很常见,依赖传递后版本有冲突嘛。一般的做法是,尝试保留最高版本,其他冲突版本全部排除,如果最高版本和某些库不兼容,再详细查看具体缺少哪些Class/Method/Field,查看报错库所依赖版本的源码,尝试降低保留的版本号,测试兼容性。
如果存在两个无法兼容的库,可以考虑升级版本:
比如 A -> B1.1, C -> B1.9 ,那么优先考虑使用B1.9,如果使用B1.9后发现A引用的方法再B1.9中不存在,那么就看看B1.1-1.9 之间的版本,有没有可以兼容的
如果中间没有任何版本可以兼容,那么可以考虑升级A的版本,很可能A的新版本的B依赖也已经升级。
如果还是无法兼容,那么也可以尝试降级C版本,或者手动修改源码,重新构建发布私服,同时在修改的版本代码中,详细记录所有修改点,这样可以保证以后升级的可行性。