今天整理项目模块,将大量的代码、依赖搬来搬去,调整基础代码,不让报错,启动项目直接报错了,报的是 NoSuchMethodError
我也没改依赖啊,第一时间怀疑 估计idea 或者maven的缓存问题吧,清缓存重启了ide 然后又反复刷新了 maven ,再重启项目 发现还是有这个问题。那估计是代码有问题了。
我直接从日志报的这个类 LoaderOptions
看,搜索发现有 3 个项看,不同的版本,到这就很明显了,就是 maven 依赖冲突了,没有排掉多余的依赖,导致程序应用时,可能加载到了低版本的那个类,发现没有需要的方法,就抛出了异常。
看日志 应该是缺少这个方法导致 setMaxAliasesForCollections
,那就打开三个类看下到底怎么个事。
很明显,只有中间那个 1.27
版本的有这个方法,那我们就要排除掉另外那个版本的依赖。
那么问题来了,我怎么知道另外两个版本是在哪引入的呢,也不是我自己引入的外部依赖,应该是集成什么框架后,被动一起引入的。
可以从启动失败的那个模块出发
直接在这分析这个模块的依赖,简单搜索下冲突类的路径,右边就会给出这个依赖在哪应用的、有什么问题,idea已经告诉我这个依赖有冲突了。我们只需要根据上面的分析,保留 1.27
版本,排除掉 1.23
的就行了。至于上面搜索出来的 还有一个 1.20
版本的不用管,这个模块没有引用,估计是其他模块引用的,因为上面的搜索是搜的整个项目,这个分析依赖只分析指定模块,所以没有正常。
直接将 spring-cloud-starter-alibaba-nacos-discovery
下的 snakeyaml
排除掉,刷新依赖,然后启动服务。
正常启动了,没啥问题。
害 只能说依赖太多太乱了,不敢想在企业项目中重构代码,有多麻烦、恐怖。代码能跑就尽量别动了,如果不是必须的话。😂
评论区