Eclipse建立Java工程中的三个JRE选项的区别(Use an execution environment JRE,Use a project specific JRE,Use default JRE)

简介:

一.首先看新建Java Project时候让选择的JRE的对话框

 

关于这三个选项,对应的Eclipse的官方给出了如下解释:(http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Freference%2Fref-wizard-java-project.htm

二.先介绍一下一下概念中会遇到的个别名词:

①compiler compliance level 翻译:“编译器执行的版本”(对应设置页的eclipse官方解释请点击

 

可以看到,设置他的参数描述是 Compiler compliance level,直译是“编译器服从的等级”。其后的下拉菜单可以选择JDK的版本。其实,这个参数是设置你的class的运行等级,即你的程序是以哪种版本的JDK进行编译,所以得到的class至少要在这个版本的JRE上运行才行。

举个例子:
比如你的JDK版本是1.7,默认情况下你的Compiler compliance level应该是1.7,因为JRE本来就是为对应版本的JDK开发的程序所服务的。新的JDK提供了更多的功能,而这些功能都要有对应的JRE(至少是对应的JRE)来提供运行环境。所以你的JDK的版本要大于等于Compiler compliance level的版本才行。
之所以提供了这个参数选项,是考虑到将当前编写的程序放到低版本的JRE环境中运行的这种状况。同时,为了能够顺利保证可以在低版本的JRE上运行,你要时刻保证不能使用高版本的JDK中提供的API,道理显而易见。
最后,你必须安装对应的低版本的JRE来运行这个经过降级编译的程序,否则他提示你安装对应版本的JRE。

如下图:

②execution environment  翻译:“执行环境” (对应设置页的eclipse官方解释请点击

关于 执行环境 的设置对话框如下:(该在该Eclipse中我只安装了一个jdk1.8的路径)

 

如果你安装了多个版本的JRE,在右边的Compatible JREs列表里,会列出左边Execution Environment对应的兼容JRE。

我装过1.7和1.8版本的JDK,自然有对应版本的JRE,高版本兼容低版本,所以所有的列表中都有这两个选项。我在左侧选中的是JavaSE-1.8来说,最Perfect match的当然是对应自己版本的JRE。

而且他版本,除非你也安装了对应的JRE,否则找不到那个Perfect match JRE。(在左侧选着JavaSE-1.3,左侧对应的Compatible JREs也是jdk1.8.0_74 但是没有右边中括号的[perfect match]),如下图:

 

同时,如果你想指定Execution Environment中某个JRE的默认兼容JRE(右侧有多个JRE的情况下),那就在右边的那个JRE前面勾选复选框,如下图:

 

 三.再看New Java Project上的JRE对应的三个选项:

①Use an execution environment JRE:

When selected, you can specify an execution environment to be used for the new Java project. The new project will use a compiler compliance which fits best the selected execution environment.
Execution environments can be configured on the Java > Installed JREs > Execution Environments preference page.

当你新建一个Java Project的时候可以选择一个特定的 执行环境,这个新建的Java Project将会使用一个 最适合你选择的“执行环境” 对应的编译器执行的版本。

“执行环境”的设置在 路径 Java > Installed JREs > Execution Environments  属性页

 

这个选项是最令人纠结的。你点开其后的下拉菜单,会看到这样一幕。

它提供了eclipse支持的所有运行环境选项(只是选项而已)。

按照官方的解释,选中该选项,你的compiler compliance将会被设置为对应你所选的JRE版本。

比如,我电脑上只有JRE1.7,如果我选中Use an execution environment JRE,并选择了“JavaSE-1.6”,那么就会有这样的提示。

 

即是说,默认的compiler compliance编译级别为1.7,即我的JDK的JRE版本,新的工程将会被指定为1.6的编译级别。

这样看起来好像跟我之前讲的自定义compiler compliance如出一辙,而且好像解决了那个需要对应低版本的JRE的警告问题。

但是,当你建立完工程,会看到Problems视图里有一个警告。

嗯,没错,你仍然需要安装对应版本的JRE才行。

不过,你写个“Hello World!”还是可以运行的。

  

②Use project specific JRE:

When selected, you can explicitly specify the JRE to be used for the new Java project. The new project will use a compiler compliance which matches the version of the selected JRE.

 

其实这个选项跟Use default JRE是互补的。之前说道,你可以安装很多版本的JRE,选择Use default JRE就会指定默认JRE为你构建用的JRE,但如果你想选择其它你所安装的JRE的话,就可以选中这个Use project specific JRE,在其后的下拉菜单中,你就可以选择你想使用的JRE。

同时,compiler compliance也会被设置为对应JRE版本的编译级别。

③Use default JRE:(次选项为这三个选项中的默认选项)

When selected, the New Java Project Wizard creates a new Java project which uses the workspace default JRE. The default JRE can be configured on the Java > Installed JREspreference page.
The project will also use the default compiler compliance which can be configured on the Java > Compiler preference page.
Click on Configure default... to configure the default JRE and compiler compliance.

 

 你会注意到,我解释compiler compliance时的最后那张图上,有一个Configure…跳转。

 

他会跳转到这里 Java > Installed JREs 

 

在这里,你可以配置你电脑中的JRE,只要你想,从1.1到1.7,当然现在最新有1.8,所有版本的JRE你都可以安装,并通过旁边的Add按钮添加到这里。注意这里是JRE,之所以Name中有JDK,是因为这个JRE是JDK附带的,不是独立安装的。JRE可以随便你装多少,但JDK一个就够了。

每个JRE前面都有一个复选框,虽说是复选框,但只能有一个被选中,而被选中的就会作为默认JRE。

所以,Use default JRE的作用,就是在你建立工程时,如果选中,就将这个默认JRE作为你构建用的JRE。就像我最开始的那张图上一样,并给出了提示“currently 'jdk1.7.0_71'”。

 四.总结

所以,总结一下,就是:

1.如果电脑中只有一个版本的JRE,因为你是初学者,初级开发者,或者你的开发只需用一个版本的JRE,那么你就选Use default JRE:就可以了。因为你的eclipse的启动使用就是这个JRE,它会把这个JRE配置为默认的JRE,而通常情况下这个JRE就是你JDK中的JRE,一切都是这么顺理成章。

2.如果电脑中有多个版本的JRE,就可以使用Use project specific JRE:来选择你想使用JRE。这个时候因为你的JDK和JRE的版本可能不对应了,所以compiler compliance会被调整为你所选的JRE的版本。

3.至于Use an execution environment JRE:这个选项,如果你要选的版本的JRE已经安装了,那么你就可以安心的选择了。否则你一定逃不过这个警告

 

其实Use project specific JRE:Use an execution environment JRE:这两个选项都是帮助你选择不同的JRE,前者是让你从已有的JRE中选择,所以你有什么他就给你提供什么,比较靠谱;而后者是让你从他可以提供的JRE中选择,他可以提供什么,你就可以选什么,但选完之后你有没有对应JRE那就是另一回事了。

 

另外:

除了在新建JavaProject的时候让选着的JRE三个选项之外,如果对已经建立的项目,进行该项目的JRE类库编辑也同样对应三个选项,两个入口的这三个选项是相互对应的。

 

 

 

 =========================================================================

ps发现:

安装的jdk目录下的内容:


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/7569150.html,如需转载请自行联系原作者

相关文章
|
29天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
67 14
|
24天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
22 1
|
1月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
56 8
|
1月前
|
Java Android开发
Eclipse Java 构建路径
Eclipse Java 构建路径
39 3
|
1月前
|
Java
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别
|
1月前
|
Java Maven Android开发
【Azure Developer】VS Code打包Java maven Project 遇见 BUILD FAILURE
Unknown lifecycle phase "lean". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>
|
2月前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
2月前
|
Java
Java基础之 JDK8 HashMap 源码分析(中间写出与JDK7的区别)
这篇文章详细分析了Java中HashMap的源码,包括JDK8与JDK7的区别、构造函数、put和get方法的实现,以及位运算法的应用,并讨论了JDK8中的优化,如链表转红黑树的阈值和扩容机制。
39 1
|
2月前
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
44 1
|
2月前
|
Java
Java代码解释静态代理和动态代理的区别
### 静态代理与动态代理简介 **静态代理**:代理类在编译时已确定,目标对象和代理对象都实现同一接口。代理类包含对目标对象的引用,并在调用方法时添加额外操作。 **动态代理**:利用Java反射机制在运行时生成代理类,更加灵活。通过`Proxy`类和`InvocationHandler`接口实现,无需提前知道接口的具体实现细节。 示例代码展示了两种代理方式的实现,静态代理需要手动创建代理对象,而动态代理通过反射机制自动创建。

推荐镜像

更多