Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JRE 1.7是否能够运行1.8 JAR?_Java - Fatal编程技术网

Java JRE 1.7是否能够运行1.8 JAR?

Java JRE 1.7是否能够运行1.8 JAR?,java,Java,我有两个jar:CLI.jar和Some.jar;CLI.jar依赖于Some.jar CLI.jar类的主要版本是51(Java 7) Some.jar类的主要版本是52(Java8) 我在主机上用JRE 1.7运行java-jar CLI.jar,它给出了“不支持的主要.次要版本52.0”错误。 我最初认为这是JRE版本的问题,但当我切换到另一台也有JRE 1.7的主机时,我没有看到这个错误,一切正常 我错过了什么?我是一名专业软件开发人员,我了解基本知识,并仔细检查了我使用的JRE版本。J

我有两个jar:CLI.jar和Some.jar;CLI.jar依赖于Some.jar

CLI.jar类的主要版本是51(Java 7) Some.jar类的主要版本是52(Java8)

我在主机上用JRE 1.7运行java-jar CLI.jar,它给出了“不支持的主要.次要版本52.0”错误。 我最初认为这是JRE版本的问题,但当我切换到另一台也有JRE 1.7的主机时,我没有看到这个错误,一切正常


我错过了什么?我是一名专业软件开发人员,我了解基本知识,并仔细检查了我使用的JRE版本。

JRE 1.7无法运行1.8类文件(扩展为需要1.8类文件的JAR)。您遇到的错误很好地说明了这一点


如果另一台计算机可以运行相同的JAR文件,则其Java版本不是1.8。请注意,一台机器上可以安装多个JRE。

TL;DR-,Java字节码不向前兼容,但向后兼容


更多细节:

通常,使用更高版本的Java编译的文件不能在早期的Java机器上运行(例如,使用JDK1.8编译的类不能使用JDK1.7运行)

然而,这种说法在上下文中是错误的。任何版本的Jdk在设计上都是向后兼容的,这意味着JDK1.8可以运行使用JDK1.7编译器编译的程序



这里有个小陷阱。这很少见,但有时,更高版本的Java会弃用,然后最终从构建中删除一些API、框架、库等。例如,JavaFX从Java11开始就被删除了。因此,如果出现这种情况,并且您升级了Java,您只需要手动添加缺少的(在本例中为-JavaFX)依赖项。

我在这里遗漏了什么也许你在另一台主机上运行了1.8,尽管在某个地方有1.7。不,我在另一台主机上进行了双重检查。java版本给出了“1.7.0_251”,它们是否可用于测试?严格地说,StackOverflow要求问题的可再现性非常高,如果我在这里编写
[mre]
,而不进行代码格式化,它会自动扩展为一个链接。
java-version
java-version“1.7.0\u 251”在这种情况下,可能只有JAR中的某些类处于52.0级别,这些类在另一台主机上不是必需的。或者您可能有一个明确指定另一个JRE的启动脚本。无论您的JAR在另一台主机上工作的原因是什么,这并不是因为Java1.7可以运行Java1.8编译的类,而是同一组JAR。我不知道你所说的“其他主机上不需要这些类”是什么意思。。它们具有相同的依赖关系图,并且以相同的方式使用。我知道你说了什么,我问这个问题是因为我在主机上看到的与之相矛盾。其中哪一个加载到JVM取决于程序的执行。程序的执行可能取决于配置、您所在的操作系统、输入文件或其他一些因素。但是,如果没有关于您正在运行哪个程序以及如何运行它的可靠信息,所有这些都只是猜测。我知道的与您所说的完全相同,但我所看到的与之相矛盾。。否则我就不会在这里问这个问题了…@杰夫,首先放松点。我刚刚看到了你最新的问题,如果没有阅读,我无法想象你在解决什么问题。您能准确地包含这两台机器的Java 7版本吗?你在Maven项目中遇到这个问题吗?我使用Gradle构建项目。让我检查一下,我会更新一个默认的是1.7.0_261,成功的是1.7.0_251@Jeff你解决了吗?我相信这两台机器上都必须有其他JVM实例在运行。