访问库(使用更高的jdk编译)在从较低的JRE访问时会出现异常

时间:2013-04-20 11:24:58

标签: eclipse jvm java

我创建了一个jar文件(使用jdk1.7编译)。当我在一个项目中使用这个jar(使用JRE 1.6)时,我得到以下异常 - 不支持的major.minor版本51.0(我认为51.0适用于jdk1.7)。我使用eclipse IDE进行所有这些操作。

我想知道这个异常是否是一种规范(在这种情况下)或是因为eclipse中的类加载工作方式不同

2 个答案:

答案 0 :(得分:1)

类加载由JVM在eclipse和其外部执行。此错误仅表示类文件的文件格式在Java 7中已更改,并且Java 6虚拟机不知道将来的类文件格式。

您可以指示Java编译器使用以前java版本的类文件格式(在eclipse中,您可以在Properties - > Java Compiler - > JDK compliance)下找到该设置。

此外,您还需要验证您是否仅使用JDK 6中也存在的API元素。

答案 1 :(得分:1)

这是预期的。字节码专门为java版本编译,不能在较低版本上执行。这是因为它可能具有早期Java版本不支持的字节码指令和/或功能。

要编译较低的java版本,您需要显式指定编译的目标版本,例如:

javac -target 1.6 ...

在Eclipse中,您可以在Properties>下进行设置。 Java编译器> “生成的.class文件兼容性”。但是一般来说,建议只使用Java 6编译器来确保实际上只使用Java 6中包含的功能和库。