使用JDK 7编程是否允许应用程序在JRE 6上运行?

3
我正在使用Eclipse进行编程。我从未更改过Eclipse的默认编译设置或其他任何设置。
如果我已经在电脑上安装了JDK 7,那么我的可运行JAR文件是否会在旧的JRE上运行出问题,假设旧的JRE支持我程序的所有功能?
例如,如果我在Eclipse中编写一个应用程序,安装了最新的JDK - 那么该程序在稍旧的JRE上运行是否会有问题?
如果答案是“是”的话 - 我该怎么办?如何让我的程序在比我的JDK更旧的JRE上运行?谢谢

2
当你尝试时会发生什么? - JB Nizet
您可以告诉Eclipse您安装了多个JDK,并选择每个项目要使用哪一个。 - greg-449
@greg-449 这是在旧版Java上允许我的应用程序运行的“标准”方式吗?如果我不这样做,那么我的应用程序的“默认”是否只能在我编程时使用的适用于JDK的JRE上运行? - user3150201
1
很难确定您是否使用了特定于Java 7的运行时库中的某些内容,重新编译Java 6库更安全。 - greg-449
@greg-449 实际上有一个 Maven 插件("animal sniffer"),可以检查这个问题 :) - Marko Topolnik
2个回答

5
如果您将代码编译为JRE 6,那么它只能在JRE 6上运行。请检查您的编译器设置(项目->属性->Java编译器),确保您编译的是Java 6,否则如果用户没有安装Java 7,则他们会收到UnsupportedClassVersionError错误。
您还需要确保不使用任何Java 7功能(例如java.nio.Path),或安装Java 6 JDK并使用它来编译应用程序,否则在Java 6上运行应用程序时会出现缺少方法/类的异常(如果使用JDK 6,则会获得编译时错误)。

我明白了。那么让我问你一个问题:如果我很少使用Java 7中引入的功能,那么是否明智的做法是卸载JDK 7,安装JDK 6,并以此方式进行开发?这将确保更多的人能够运行我的程序,对吗? - user3150201
这样,Java 6 和 Java 7 的计算机都能够运行我的应用程序,对吗? - user3150201
1
@user3150201 您可以在JDK 7旁边安装JDK 6,只需确保配置Eclipse以使用JDK 6来运行需要JRE 6的项目。 - Njol

2
Eclipse使用的Java运行时不必与您的项目使用的相同。您可以在项目属性中设置项目的运行时:

http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2FgettingStarted%2Fqs-ProjectConfiguration.htm

Java 7是向后兼容的,这意味着旧版Java程序可以在这个版本中运行。然而,Java版本从不向前兼容。这意味着在Java 7中编写的程序不一定能在Java 6中编译,而在Java 6中编写的程序也不一定能在Java 5中编译。这是因为Java 7包含了Java 6没有的功能,比如switch语句中的字符串,而Java 6包含了Java 5没有的功能,比如脚本语言支持(请参见https://en.wikipedia.org/wiki/Java_version_history进行概述)。
同时,缺乏向前兼容性意味着使用较新版本的Java编译的程序将无法在较旧版本的Java运行时上运行。Java编译器专门使用版本标识符来保护已编译的Java类文件,以便在较新版本的Java中编译这些类时不运行这些类。
如果您小心避免使用Java 7的功能,您可以在Java 7中编写一个Java程序,在Java 6中编译和运行。但是,如果您知道您的程序需要在Java 6中运行,最好将项目的运行时设置为Java 6。

谢谢您的帮助。我知道不同版本的Java有不同的功能。但是我想知道的是:假设我使用JDK 7制作了一个程序,但是这个程序没有使用JRE 6不支持的任何功能。我的问题是,我是否需要以某种特殊的方式编译我的程序,或者进行任何特殊的操作,以便它能够在JRE 6上运行 - 还是像平常一样编译就足够了? - user3150201
扩展了我的回答。编译器不支持向前兼容。 - Lodewijk Bogaards
我明白了。所以基本上,如果我在计算机上安装了JDK 7并在Eclipse中进行编程,我需要明确地告诉Eclipse将程序编译为可以在JRE 6上运行。(即使我的程序不使用任何JRE 6不支持的功能)。这正确吗? - user3150201
我去了Oracle的网站下载JDK 6。上面写着:“它们(旧版本)没有更新最新的安全补丁,不建议在生产中使用。”但是如果要为使用旧版JRE的计算机开发程序,难道不是唯一的方法吗? - user3150201
如果您为Java 6开发,安装了Java 6 及更高版本 的人可以运行您的程序。然而,建议人们/生产环境安装最新的Java运行时,以便从安全补丁中受益。 - Lodewijk Bogaards
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接