使用Java 8开发的程序可以在Java 7上运行吗?
我有点困惑。
Oracle表示Java 8与Java 7(向后)高度兼容。但是,Java 8程序可以在Java 7上成功运行(SE / EE)的可能性是什么?
如果第一点是真的,Java 8应用程序将在Java 7服务器支持上部署和执行?例如,Tomcat 8还是WildFly?
我有点困惑。
Oracle表示Java 8与Java 7(向后)高度兼容。但是,Java 8程序可以在Java 7上成功运行(SE / EE)的可能性是什么?
如果第一点是真的,Java 8应用程序将在Java 7服务器支持上部署和执行?例如,Tomcat 8还是WildFly?
一般来说,不可以。
向后兼容性意味着您可以在 Java 8 运行时上运行 Java 7 程序,而不是相反。
这有几个原因:
字节码是版本控制的,JVM 检查它是否支持它在.class文件中找到的版本。
某些语言构造无法在以前版本的字节码中表示。
在较新的JRE中有新的类和方法,这些类和方法不适用于较旧的类和方法。
如果你真的,真的想要(提示:你没有),你可以强迫编译器将源代码视为Java的一个版本,并为另一个版本发出字节码,使用如下内容:
javac -source 1.8 -target 1.7 MyClass.java
(Maven)也是如此,并且针对JDK7进行编译,但在实践中,它通常不起作用而不是工作。我建议你不要。
编辑:JDK 8显然不支持这种确切的组合,所以这不起作用。其他一些版本组合确实有效。
还有一些程序可以将较新的Java程序转换为较旧的JVM。要将Java 8转换为5-7,您可以尝试 https://github.com/orfjackal/retrolambda 要低于5,您可以选择以下选项之一:http://en.wikipedia.org/wiki/Java_backporting_tools
这些黑客都不会给你新的Java 8类和方法,包括对集合,流,时间API,未签名API等的函数式编程支持。所以我会说这不值得。
或者,由于您希望在应用程序服务器上运行 Java 8 JEE 应用程序,只需在 Java 8 上运行整个服务器,它可能会起作用。
向后兼容意味着
您可以在较高的配置上运行较低的配置,而不是 。Vice-Versa