我正在使用eclipse(在Ubuntu 14.04LTS上)的MapReduce Java项目,我正在使用Apache Avro序列化框架,因为我需要avro-tools-1.7.7.jar文件。我从apache网站下载了这个jar,我用下载的jar编写了java代码。当我执行程序时,我收到java.lang.VerifyError错误。我从几个网站上读到这个错误是由于jar中的JDK版本的编译类文件与运行时JDK版本之间的版本不匹配。所以我从当前项目中检查了一个类的版本。
srimanth@srimanth-Inspiron-N5110:~$ javap -verbose CCHD\&CCHA/TimeForMapReduce/bin/practice/ArrayWritableX.class
Classfile /home/srimanth/CCHD&CCHA/TimeForMapReduce/bin/practice/ArrayWritableX.class
Last modified 19 Apr, 2015; size 1234 bytes
MD5 checksum 9a3d03ca0f126bf7ee65d14099108984
Compiled from "ArrayWritableX.java"
public class practice.ArrayWritableX
SourceFile: "ArrayWritableX.java"
minor version: 0
major version: 51
它显示我使用的JDK版本是51.我从该jar中提取了该类文件,并检查了该类文件的版本。它显示版本为50。
srimanth@srimanth-Inspiron-N5110:~$ javap -verbose org/apache/avro/mapred/AvroCollector.class
Classfile /home/srimanth/org/apache/avro/mapred/AvroCollector.class
Last modified 18 Jul, 2014; size 603 bytes
MD5 checksum d1a99c2d2ad48c8ed9d02d6b45708f70
Compiled from "AvroCollector.java"
public abstract class org.apache.avro.mapred.AvroCollector<T extends java.lang.Object> extends org.apache.hadoop.conf.Configured
Signature: #19 // <T:Ljava/lang/Object;>Lorg/apache/hadoop/conf/Configured;
SourceFile: "AvroCollector.java"
minor version: 0
major version: 50
我该如何解决这个问题。有没有办法在jar文件中重新编译整个类文件?或者我是否需要降级我的JDK?
其他信息:我没有使用maven
提前致谢。我很感激一些帮助。
答案 0 :(得分:0)
对于自定义类和默认JDK,使用1.7,而hadoop类是使用JDK1.6编译的。
因此,更改您的JAVA_HOME变量,使其指向JDK 6工具包而不是JDK7。发布重新编译所有类并重建jar(如果有的话)。