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/