手动导包和maven导包发生冲突

记录一次jar包冲突问题以及解决方案,如果有更好的解决方案,欢迎留言~~~

本项目以IDEA作为开发环境

1.出现问题

这次问题出现在修改开源项目上,拿来开源项目运行是没有问题的,但是后来要在原有的项目添加hive和impala的数据源导入数据,所以我们导入了下面的这个包:
hive-jdbc-1.1.0-cdh5.13.2-standalone.jar
整体程序逻辑没有问题,我们开始运行测试,但是出现以下问题:

01:05:49.773 WARN  org.springframework.web.context.support.XmlWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient': Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'create' threw exception; nested exception is java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.ObjectMapper.addMixIn(Ljava/lang/Class;Ljava/lang/Class;)Lcom/fasterxml/jackson/databind/ObjectMapper;
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1128)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1022)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:754)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4701)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5167)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719)

问题描述是:springframework框架无法对redissonClient进行初始化,主要是缺少com.fasterxml.jackson.databind.ObjectMapper.addMixIn()这个方法???

2.定位问题

首先双击shift全局搜索addMixIn这个方法,发现可以在ObjectMapper这个类中搜索到,然后查看maven依赖,没有问题;

网上搜索说是Jackson版本太低的问题,在maven中升级版本,问题依然存在;

我们依次点击报错堆栈的信息行数

image.png

在点击第二行是发现类中objectMapper.addMixIn()出现报错,进入到ObjectMapper发现的确没有addMixIn这个方法,what??????
我们搜索addMixIn方法时看到ObjectMapper是有这个方法的,现在为什么没有了呢?

我们定位到这个包类的位置,发现它默认使用的是hive-jdbc-1.1.0-cdh5.13.2-standalone.jar中的Jackson包,问题找到。

image.png

3.解决问题

在网上查询了关于自己导入的jar包和maven管理的jar包冲突怎么解决,发现没有此类问题的回答(或者是我找的方式有问题???)
然后就去请教了部门的java大佬,大佬给出一大堆建议,但是都没什么用。。。
这时突发奇想试试可不可以替换jar包中的class文件呢?大佬这时也说可以这样解决问题(马后炮→_→)
将maven中下载的jar包解压缩(注意和工程中maven引入的版本一致),将对应路径下的class文件复制到hive-jdbc-1.1.0-cdh5.13.2-standalone.jar包(好压打开,在好压界面操作,不要解压缩)对应的路径下进行替换。
将原先的jar包删除,重新导入,或者直接替换也可以,idea自动刷新,启动工程,问题解决。。。。

你可能感兴趣的:(手动导包和maven导包发生冲突)