首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java 8开发的程序能在Java 7上运行吗?

用Java 8开发的程序能在Java 7上运行吗?
EN

Stack Overflow用户
提问于 2014-03-24 13:11:21
回答 6查看 50.3K关注 0票数 53

我有点困惑。

  1. Oracle说Java 8与Java 7(向后)高度兼容。但是,Java 8程序可以成功地在Java 7 (SE/EE)上运行的可能性是什么呢?
  2. 如果第一点是正确的,那么Java 8应用程序将在Java 7服务器支持下部署和执行?例如Tomcat 8或WildFly?
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-03-24 13:12:39

一般情况下,不。

向后兼容性意味着您可以在Java 8运行时上运行Java 7程序,而不是相反。

这有几个原因:

  • 字节码是版本化的,JVM检查它是否支持在.class文件中找到的版本。
  • 有些语言结构不能在字节码的早期版本中表示。
  • 在新的JRE中有一些新的类和方法,这些类和方法不能用于旧的类和方法。

如果您真的非常需要(提示:您不需要),您可以强制编译器将源代码视为Java的一个版本,并为另一个版本发出字节码,使用如下所示:

代码语言:javascript
复制
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以下,您可以选择其中一个:工具

这些黑客不会为您提供新的Java 8类和方法,包括对集合、流、时间API、无符号API等的函数式编程支持。所以我会说这不值得。

或者,由于您希望在应用程序服务器上运行Java 8 JEE应用程序,所以只需在Java 8上运行整个服务器,它可能会工作。

票数 79
EN

Stack Overflow用户

发布于 2014-03-24 13:17:34

向后兼容性意味着

您可以在更高的配置(而不是Vice-Versa )上运行更低的配置。

票数 13
EN

Stack Overflow用户

发布于 2014-03-24 13:23:18

好的,有一个-target编译器选项,它允许您针对以前的java版本的类文件格式。但是,这并不能修复或检测一些事情,比如在目标版本之后使用JDK中引入的类或方法。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22610400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档