环境有JRE 7但得到不支持的major.minor版本51.0

时间:2016-02-15 15:57:22

标签: java hadoop java-7 unsupported-class-version

我正在开发一个部署在测试和生产环境中的Hadoop项目。虽然在测试环境中一切正常,但生产环境中的相同代码/构建失败,并出现以下错误:

  

线程中的异常" main" java.lang.UnsupportedClassVersionError:com / package / vo / MyClassName:不支持的major.minor版本51.0     at java.lang.ClassLoader.defineClass1(Native Method)at   java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)at at   java.lang.ClassLoader.defineClass(ClassLoader.java:615)at   java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)     在java.net.URLClassLoader.defineClass(URLClassLoader.java:283)at   java.net.URLClassLoader.access $ 000(URLClassLoader.java:58)at   java.net.URLClassLoader $ 1.run(URLClassLoader.java:197)at   java.security.AccessController.doPrivileged(Native Method)at   java.net.URLClassLoader.findClass(URLClassLoader.java:190)at   java.lang.ClassLoader.loadClass(ClassLoader.java:306)at   sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301)at at   java.lang.ClassLoader.loadClass(ClassLoader.java:247)at   java.lang.Class.forName0(Native Method)at   java.lang.Class.forName(Class.java:247)at   sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:95)     在   sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:107)     在   sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31)     在   sun.reflect.generics.visitor.Reifier.reifyTypeArguments(Reifier.java:50)     在   sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:120)     在   sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31)     在   sun.reflect.generics.repository.FieldRepository.getGenericType(FieldRepository.java:67)     在java.lang.reflect.Field.getGenericType(Field.java:223)at   com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:117)     在   com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)     在com.google.gson.Gson.getAdapter(Gson.java:356)at   com.google.gson.Gson.fromJson(Gson.java:802)at   com.google.gson.Gson.fromJson(Gson.java:768)at   com.google.gson.Gson.fromJson(Gson.java:717)at   com.google.gson.Gson.fromJson(Gson.java:689)

我理解这应该是由于编译类时使用的java版本与用于运行相同的java版本之间的版本不匹配。

但我检查了这一点,看到我的测试和生产环境都使用jre 7,我相信版本51应与此兼容。

测试环境

]$ java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

生产环境

]$ java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

测试环境中使用的Hadoop版本:Hadoop 2.6.0.2.2.9.0-3393 生产环境中使用的Hadoop版本:Hadoop 2.4.0.2.1.15.3-7

上面的类在shell脚本中使用以下命令运行,这是发生错误的地方。

**java -cp $ALL_JARS com.package.hello.hadoop.udf.GetCount**

其中ALL_JARS是':' jar文件的分隔列表,其中一个包含上面的类GetCount,另一个包含显示错误的类:com / package / vo / MyClassName

我是否知道这里可能出现的问题以及仅在与测试环境具有相同java版本的生产环境中也是如此

0 个答案:

没有答案