SpringMvc+Mybatis整合hbase时出现的问题

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.collect.MapMaker.keyEquivalence(Lcom/google/common/base/Equivalence;)Lcom/google/common/collect/MapMaker;
    at com.google.common.collect.Interners$WeakInterner.(Interners.java:68)
    at com.google.common.collect.Interners$WeakInterner.(Interners.java:66)
    at com.google.common.collect.Interners.newWeakInterner(Interners.java:63)
    at org.apache.hadoop.util.StringInterner.(StringInterner.java:49)
    at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:2108)
    at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:2001)
    at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:1918)
    at org.apache.hadoop.conf.Configuration.get(Configuration.java:721)
    at org.apache.hadoop.conf.Configuration.getTrimmed(Configuration.java:740)
    at org.apache.hadoop.conf.Configuration.getBoolean(Configuration.java:1093)
    at org.apache.hadoop.hbase.HBaseConfiguration.checkDefaultsVersion(HBaseConfiguration.java:66)
    at org.apache.hadoop.hbase.HBaseConfiguration.addHbaseResources(HBaseConfiguration.java:102)
    at org.apache.hadoop.hbase.HBaseConfiguration.create(HBaseConfiguration.java:113)

    at com.yitian.zhishang.utils.HbaseOperatorUtil.(HbaseOperatorUtil.java:33)



以上错误是由于javaee6中的webservices-api-osgi.jar 和 guava12.0.1.jar(使用hbase需要用到的jar包)产生的冲突;
注意:这个错误是直接运行java程序引起的

解决的办法有如下几个方法:
1、在buildPath中删除对javaee6的引用

2、使用javaee5来代替javaee6

3、采用servlet来调用对hbase的操作(采用的是tomcat服务器)


产生以上错误的原因是jar包的加载顺序引起的:
(1)如果是直接运行一个java文件,jar包是先加载javaee6的,然后再加载用户自己添加进去的jar包

 (2)如果是采用tomcat,则tomcat是先加载用户导入的jar包,然后再加载javaee的


注意:
  在tomcat中,jar包的加载顺便可以自己在context.xml文件设置

你可能感兴趣的:(分布式系统)