Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解决编译类版本和运行时版本之间的JDK版本不匹配问题?_Java_Eclipse_Hadoop_Jar_Compilation - Fatal编程技术网

Java 如何解决编译类版本和运行时版本之间的JDK版本不匹配问题?

Java 如何解决编译类版本和运行时版本之间的JDK版本不匹配问题?,java,eclipse,hadoop,jar,compilation,Java,Eclipse,Hadoop,Jar,Compilation,我正在Ubuntu 14.04LTS上的eclipse中进行一个MapReduce Java项目,为此我使用Apache Avro序列化框架,我需要Avro-tools-1.7.7.jar文件。我从apache网站下载了这个jar,并使用下载的jar编写了java代码。当我执行程序时,我得到java.lang.VerifyError错误。我从一些网站上读到,这个错误是由于jar中编译类文件的JDK版本与运行时JDK版本之间的版本不匹配造成的。所以我检查了我当前项目中的一个类的版本 srimant

我正在Ubuntu 14.04LTS上的eclipse中进行一个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


提前谢谢。非常感谢您的帮助。

对于您的自定义类和默认JDK,您使用的是1.7,而hadoop类是使用JDK1.6编译的


因此,更改JAVA_HOME变量,使其指向JDK 6 kit而不是JDK7。发布后,重新编译所有类并重建jar(如果有的话)。

所以我需要下载openjdk-6-jdk和openjre-6-jre?我建议使用Oracle java jdk而不是openjdk。OpenJDK与hadoop不兼容。您可能会在将来逐步解决一些问题。