1. 介绍
发生包冲突的事情是很多的。近来在做mapreduce编程的时候遇到一个报错问题如下:
java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String([B)Ljava/lang/String;
针对这样的问题我们该如何解决呢?
2. 解决办法
我们只要在程序中加入一条打印语句,在运行时让他输出所缺的包的运行时查找路径即可。
System.out.println(" codec location "+org.apache.commons.codec.binary.Base64.class.getProtectionDomain().getCodeSource());
3. 方法查询验证
如果提示方法找不到,在前面我们已经定位到从哪里去查找类和方法。可以手动检验下相关jar下是否存在类和方法。如果不存在,可能是由于包冲突获取了错误的依赖jar。还有种可能是由于编译时指定了错误的依赖项,导致使用错误的版本。不同版本的jar里面包含的类和方法都不同。
查询JAR推荐一个网站:http://grepcode.com/