weblogic下部署(含JedisResourcePool类引入java.lang.NoSuchMethodError:Equivalence.equals()解决

weblogic下部署(含JedisResourcePool类引入报错Caused By: java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor()Lcom/google/common/util/concurrent/ListeningExecutorService;解决

把解决思路与解决办法共享给大家。

背景:项目引入REDIS在tomcat8.5下开发环境功能正常,当打成war包部署在weblogic下部署报错,报错信息如下:

 com.tydic.back.utils.DicSaleWebContextListern failed: org.springframework.beans.factory.BeanCreationException:
 Error creating bean with name 'redis.operation.jodisPoolClient' defined in class path resource [redis-config/redis.xml]: 
Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: 
Could not instantiate bean class [com.tydic.portal.common.redis.JodisPoolClient]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError:
 com.google.common.base.Equivalence.equals()Lcom/google/common/base/Equivalence;.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redis.operation.jodisPoolClient' defined in class path resource [redis-config/redis.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: 
Could not instantiate bean class [com.tydic.portal.common.redis.JodisPoolClient]: Constructor threw exception; nested exception is
 java.lang.NoSuchMethodError: com.google.common.base.Equivalence.equals()Lcom/google/common/base/Equivalence;
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:285)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:993)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:897)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
        Truncated. see log file for complete stacktrace
Caused By: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.tydic.portal.common.redis.JodisPoolClient]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: com.google.common.base.Equivalence.equals()Lcom/google/common/base/Equivalence;
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:141)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:107)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:277)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:993)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:897)
        Truncated. see log file for complete stacktrace
Caused By: java.lang.NoSuchMethodError: com.google.common.base.Equivalence.equals()Lcom/google/common/base/Equivalence;
        at com.google.common.cache.LocalCache$Strength$1.defaultEquivalence(LocalCache.java:393)
        at com.google.common.cache.CacheBuilder.getKeyEquivalence(CacheBuilder.java:297)
        at com.google.common.cache.LocalCache.<init>(LocalCache.java:246)
        at com.google.common.cache.LocalCache$LocalManualCache.<init>(LocalCache.java:4772)
        at com.google.common.cache.CacheBuilder.build(CacheBuilder.java:804)
        Truncated. see log file for complete stacktrace

一、经过初步分析com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor在工程引入JAR包中存在,并且有此方法。但是部署在weblogic却报方法不存在。初步定位为JAR包冲突。

1、网上建议更新guava.jar到18.0版本。升级完成后部署jar包后报错依旧存在。

gradle脚本:

  compile ("com.google.guava:guava:18.0")

2、考虑当前war包下的jar与weblogic下jar存在冲突。解决方案:指定对应的代码为引入war包中的lib包。在工程webligc.xml下设定  prefer-application-packages属性,把当前的jar指定为工程中代码。

具体实现如下:

  <container-descriptor>
       <!--<prefer-web-inf-classes>true</prefer-web-inf-classes>-->
      <prefer-application-packages>
            <package-name>com.google.common.*</package-name>
      </prefer-application-packages> 
  </container-descriptor>

如此解决后,jar包冲突问题就迎刃而解了。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值