我创建了一个jar文件(使用jdk1.7编译)。当我在一个项目中使用这个jar(使用JRE 1.6)时,我得到以下异常 - 不支持的major.minor版本51.0(我认为51.0适用于jdk1.7)。我使用eclipse IDE进行所有这些操作。
我想知道这个异常是否是一种规范(在这种情况下)或是因为eclipse中的类加载工作方式不同
答案 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中包含的功能和库。