本博客部分转载自:

http://blog.csdn.net/wdjhzw/article/details/42086615  这篇博客写的非常好,很用心。

一.首先看新建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 anexecution 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 theJava > 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 theJava > Installed JREs preference page.
The project will also use the default compiler compliance which can be configured on theJava > 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目录下的内容:

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

  1. Log4j在Java工程中使用方法

    Eclipse新建Java工程,工程目录如下 1.下载log4j的Jar包,在Java工程下新建lib文件夹,将jar包拷贝到此文件夹,并将其加入到路径中,即:Jar包上右键——Build Path— ...

  2. Eclipse打包java工程

    Eclipse打包java工程步骤如下: 1.选择预打包的工程->Export. 2.选择java->JAR file. 3.导出JAR文件设置. 这里有几个选项: Export gene ...

  3. java多线程中的三种特性

    java多线程中的三种特性 原子性(Atomicity) 原子性是指在一个操作中就是cpu不可以在中途暂停然后再调度,既不被中断操作,要不执行完成,要不就不执行. 如果一个操作时原子性的,那么多线程并 ...

  4. SuperDiamond在JAVA项目中的三种应用方法实践总结

    SuperDiamond在JAVA项目中的三种应用方法实践总结 1.直接读取如下: @Test public static void test_simple(){ PropertiesConfigur ...

  5. java工程中不能存在多个数据库连接jar包

    java工程中不能存在多个数据库连接jar包 比如存在mysql-java-connector.jar的,放入mssqlserver.jar就会产生冲突.只能存在一个类型的jar包.

  6. 在java工程中导入jar包的注意事项

    在java工程中导入jar包后一定要bulid path,不然jar包不可以用.而在java web工程中导入jar包后可以不builld path,但最好builld path.

  7. 重新使用Eclipse建立安卓工程遇到的问题

    很早之前用过Eclipse建立安卓工程,很久没用了,最近打算用Eclipse开发安卓程序,我是用谷歌提供的Eclipse集成环境建立的安卓工程,发现有了一些变化,而且遇到一点问题,这几天不断学习,终于 ...

  8. Eclipse IDE 添加jar包到Java工程中

    操作系统:Windows 10 x64 工具1:Eclipse Java EE IDE for Web Developers. Version: Photon Release (4.8.0) 在Pac ...

  9. java工程中的.classpathaaaaaaaaaaaaaaaa<转载>

    第一部分:classpath是系统的环境变量,就是说JVM加载类的时候要按这个路径下去找,当然这个路径下可以有jar包,那么就是jar包里所有的class. eclipse build path是ec ...

随机推荐

  1. 算法练习LeetCode初级算法之字符串

    反转字符串 我的解法比较low,利用集合的工具类Collections.reverse反转,用时过长 class Solution { public void reverseString(char[] ...

  2. 动态加载、移除js、css

    本文简单介绍动态加载.移除.替换js/css文件 .有时候我们在写前端的时候,会有出现需要动态加载一些东如css js 这样能减轻用户加载负担,从而提高响应效率.下面贴出代码.//JS写法 <s ...

  3. 152. Maximum Product Subarray最大乘积子数组/是否连续

    [抄题]: Given an integer array nums, find the contiguous subarray within an array (containing at least ...

  4. 团队项目NABCD分析

    1.卡片分类讨论 我们团队在软件工程课上对准备开发的帮你项目进行激烈的讨论后,得出了两个特点. (1)信息检索 (2)主动推送 之所以得出这两个特点,是因为我们作为学生,平常在校园里面有很多专用群和Q ...

  5. Linux系统中的tar命令

    时间一长什么东西都容易忘记,尤其是一些不常用的东西忘记的更快,所以避免忘记,就记录下来,可以方面使用的时候查询.Tar命令在linux系统中算是一个比较重要的命令,今天就针对该命令进行总结一下. 1. ...

  6. redis安全删key脚本(模糊匹配,长list,大set等)

    两种情况: 1.删除指定前缀开头的rediskey ,扫描和删除过程中对线上无感知 2.删除一个大的list,set,zset,hash,这种得分批次减少大小,一直缩到0再删 第一种情况:只要知道线上 ...

  7. Python3实战系列之九(获取印度售后数据项目)

    项目现状:已经部署在服务器上并正常运行了. 1.服务器上的部署 2.下载到服务器的文件列表 3.转存在到数据库SQL Server中的数据 项目总结:这次项目采用python来实现,刚开始还是有点担忧 ...

  8. Navicat导入.xls等文件失败

    一.问题 在学习django的models时,使用Navicat premium导入.xls数据的时候会出现导入失败的原因,即使是换成了csv文件也是失败的,原因是数据库的表有外键,而需要设置外键限制 ...

  9. 2019.02.17 spoj Query on a tree VI(链分治)

    传送门 题意简述:给你一棵nnn个黑白点的树,支持改一个点的颜色,询问跟某个点颜色相同的连通块大小. 思路: 还是链分治 233 记fi,0/1f_{i,0/1}fi,0/1​表示iii的所有颜色为0 ...

  10. 10. Halloween 万圣节

    10. Halloween 万圣节 (1) On October the 31st,across Britain and the USA,thousands of children are dress ...