我的问题是Java JDK和JRE是否必须兼容才能运行?
我的意思是:将来使用JDK版本8编写的Java应用程序是否可以与当前的JRE一起使用?
答案 0 :(得分:2)
编译时可以使用cross-compilation options。这样做,就可以使用与Java 1.1兼容的SDK 8编译代码。它不是1.1的非常高级的代码,但它会运行。
答案 1 :(得分:1)
简短的回答是否。
如果您在JDK 8中开发应用程序并使用JRE 7运行它,那么您将获得UnsupportedClassVersionError。
答案 2 :(得分:0)
这个问题分为两部分:
JRE是Java Runtime Environment的首字母缩写。 JDK是Java Development Kit的首字母缩写:一组用于开发Java程序的工具。 JDK还包含完整的JRE。一般来说,两者之间没有兼容性问题。但您可能需要注意不要使用仅在JDK中可用的库(例如代码生成或tools.jar)
Java本身正在编译为字节码,它是向前兼容的。这意味着您可以使用任何Java版本的字节码,并使用任何较新版本运行它。反过来通常不起作用,并使用类文件版本进行检查(" java.lang.UnsupportedClassVersionError:测试:不支持的major.minor版本51.0")。
然后是Java库,包括核心库。到目前为止,从来没有任何东西被删除,因此它们是向前兼容的。这可能会随着Java 9而改变,其中删除了一个非常小的通常未使用的库函数。
关于向后兼容性,可以通过将Java编译器设置为生成旧版本的字节码来实现。直到Java 8,编译器总是能够生成最后两个主要版本的字节码。但是,您可能会成功将Java 8源代码编译为Java 6,但无法运行它。当您使用仅在never Java上可用的库时就是这种情况。对于这种情况,例如maven animalsniffer插件将验证当您针对旧版本进行编译时,实际上只使用所述版本中存在的库。