当前位置: 首页 > 知识库问答 >
问题:

较新的JRE版本能否运行使用较旧的JDK版本编译的Java程序?

陆子航
2023-03-14

这可能是一个愚蠢的问题,但我会遇到任何问题运行Java程序和相关的库编译Java版本1.6和1.7(我编译使用1.7而一些库编译使用1.6)和运行整个程序在1.7的JRE里?

共有2个答案

胡修伟
2023-03-14

您不会遇到任何问题—这就是Java的魔力—它是向后兼容的。您几乎可以在Java8上运行Java1中的所有代码。Java 6代码没有理由不在Java 8运行时上运行。

有趣的是,对于用Java 1.4编写的应用程序,在以后的运行时运行它们时,甚至可以提高速度。这是因为Java是不断发展的,不仅是称为“Java”的语言,还有JVM(Java虚拟机)。正如最新的JVM所预期的那样,我仍然拥有十多年前的源代码,这些代码仍然可以工作。

如果您想以Java5VM为目标,那么可以使用Java8SDK工具来实现。您最终可以指定希望支持的目标VM,只要记住版本5 VM可能不支持版本8 VM将支持的所有功能。

我刚刚针对新的Java8运行时测试了我用Java5编写的代码,一切都按预期进行,因此,即使我们现在有了更强大的语言和运行时,我们也可以继续使用我们过去的投资。仅此一点就使得Java成为公司的一个伟大的开发选择。

长孙高远
2023-03-14

如前所述,您基本上是安全的,大多数产品和3rd党的图书馆都能正常工作。然而,在JDK版本之间引入二进制不兼容(使用旧JDK编译的类文件将无法在新JVM中运行)的情况确实非常罕见。

  • 在Java SE 9中,从Java SE 8开始
  • 在Java SE 8中,从Java SE 7开始
  • 在Java SE 7中,从Java SE 6开始
  • 自Java SE 5.0以来的Java SE 6中
  • 在JavaSE5.0中,从JavaSE1.4开始。二,

与JDK 9打包在一起的是一个名为jdeprscan的工具,它将验证兼容性,列出代码中不再使用的API,并建议替代方案(!)。您可以指定目标JDK版本(适用于JDK 9、8、7和6),它将列出特定于您的目标版本的不兼容性。

一个合理的经验法则是使用库的最新稳定版本作为软件目标的JRE版本。显然,您会发现这条规则有许多例外,但一般来说,公共可用库的稳定性通常会随着时间的推移而增加。

当然,在更改依赖项的版本时,必须考虑API兼容性和版本控制。

同样,大多数流行的依赖项都会有这样的信息应该可用的网页。

但是,如果您使用的是更模糊的东西,那么您可以识别出哪些JRE是为您的依赖项编译的类。

这里有一个关于如何找到类版本的好答案。您可能需要先解压缩JAR文件。

 类似资料:
  • 问题内容: 这可能是一个愚蠢的问题,但是在运行以Java 1.6 和 1.7 版编译的Java程序和相关库(我使用1.7进行编译,而某些库是使用1.6进行编译)并在1.7 JRE中运行整个程序时,我会遇到任何问题? 问题答案: 您不会遇到任何问题-这就是Java的魔力-它是向后兼容的。您几乎可以在Java 8上运行Java 1中的所有代码。没有理由不能在Java 8 Runtime上运行Java

  • 我已经使用VsCode从Java项目中创建了一个Jar文件,并且在我的pc中工作得很好。 我试着用一台没有Java的笔记本电脑来运行这样的Jar;所以我刚刚下载并安装了最新版本的JRE(https://www.java.com/es/download/ie_manual.jsp)因为这是运行的唯一要求。罐子 但是,当我尝试在这个Separate笔记本电脑中运行Jar时,我收到一条毫无意义的错误消息

  • 问题内容: Cloundfoundry最近将其Java buildpack更新到2.5版(包括Java 8和tomcat 8)。我仍想使用2.4版,因为我的应用尚未升级到Java 8。这样做最简单的方法是什么? 我可以使用 但是如何指定使用版本2.4(https://github.com/cloudfoundry/java- buildpack/releases/tag/v2.4 )?显然,指定标

  • Java版本: IDE: 火狐版本:

  • 如果我有一个maven项目,它对A和B版本2.0有显式依赖,而A对B版本1.0有传递依赖。较新版本的B会覆盖较旧版本吗?我使用了maven Depencdy:解析目标,看起来旧版本的B没有解析。如果A与较新版本的B不兼容怎么办?或者如果A依赖于B版本2.0,而我的项目在运行依赖关系后对B版本1.0有显式依赖:解析目标,那么我看不到B的较新版本。那么如何解决这些依赖关系呢? 当我使用resolve

  • 如何让composer使用我安装的较新版本的php?我已经下载并在所有本地服务器上使用了PHP5.4,但当我下载composer时,它指向我的mac电脑的默认设置#/usr/local/bin/env版本,即5.3.15。我试图编辑composer可执行文件并更改使用的php,但它破坏了可执行文件。 我试图使用作曲家来安装Laravel,因为它下载了错误的版本。 这就是我的composer可执行文