整理自:https://blog.csdn.net/wdjhzw/article/details/42086615

官方解释(链接

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 JREs preference 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.

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 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.

其实官方的解释客观来讲应该是解释清楚了的,但是他在解释的同时,又带出了其余的陌生概念,就是这个compiler compliance。那就先把这个compiler compliance的概念搞清楚。

首先,设置他的地方在这里 Java > Compiler

Compiler compliance level,直译是“编译器服从的等级”。这个参数是设置你的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。如图。

下面说建工程时这三个JRE选项具体要怎么对待。

1.Use default JRE:

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

他会跳转到这里 Java > Installed JREs

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

注:JDK(Java Development Kit)为开发包,其中包含了JRE。JRE(Java Runtime Environment)为运行环境

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

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

2.Use project specific JRE

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

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

3.Use an execution environment JRE

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

它提供了eclipse支持的所有运行环境选项(只是选项而已,还需安装对应版本的JRE)。

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

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

The default compiler compliance level for the current workspace is 1.8.The new project will use a project specific compiler compliance level of 1.7.

现在工作空间默认的编译级别是1.8,新项目将会使用特定的编译级别1.7。

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

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

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

不过,你写个“Hello World!”还是可以运行的。但是最Perfect match的选择是装一个对应版本的JRE,这里的Perfect match,出自这里。

这里就是设置那一堆JRE选项的兼容JRE。如果你安装了多个版本的JRE,在右边的Compatible JREs列表里,会列出左边Execution Environment对应的兼容JRE。

我装过1.7和1.8版本的JDK,自然有对应版本的JRE,高版本兼容低版本,所以所有的列表中都有这两个选项。但对于JavaSE-1.7来说,最Perfect match的当然是对应自己版本的JRE。而且他版本,除非你也安装了对应的JRE,否则找不到那个Perfect match JRE。

同时,如果你想指定Execution Environment中某个JRE的默认兼容JRE,那就在右边的那个JRE前面勾选复选框。

总结

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那就是另一回事了。

Eclipse中新建Java工程的三个JRE选项区别的更多相关文章

  1. Eclipse中把Java工程修改成web工程

    Eclipse中把Java工程修改成web工程 点击项目:右击:选择properties--输入project facets,将“Dynamic Web Module”打勾即可:

  2. eclipse中新建jni工程

    1.什么是NDK 网上很多不多说,全称是Android Native Developer Kit,是一个工具合集,我理解可以把c/c++打包成.so文件 这是目录结构,要用到指令ndk-build 需 ...

  3. 在eclipse中新建java问题报错:The type XXX cannot be resolved. It is indirectly referenced from required .class files

    在Eclipse中遇到The type XXX cannot be resolved. It is indirectly referenced from required .class files错误 ...

  4. Eclipse新建Java工程出现红色感叹号怎么解决?

    安装了新版本的JDK之后,在Eclipse中新建Java工程出现红色感叹号怎么解决? 其实只要在Eclipse中重新设置一下JDK路径就行了 路径:右键Java工程>>Build Path ...

  5. Eclipse中新建WEB项目,JSP页面报错。

    在Eclipse中新建java web项目,在JSP页面的第一行提示这个错误: [The superclass "javax.servlet.http.HttpServlet" w ...

  6. eclipse 中新建文件报错The superclass "javax.servlet.http.HttpServlet" was not found on the Java Buil

    在eclipse中新建文件报错错误提示如下: The superclass "javax.servlet.http.HttpServlet" was not found on th ...

  7. Java web项目搭建系列之一 Eclipse中新建Maven项目

    前提条件: 已经安装好JDK 已经安装好Maven 已经安装好Eclipse 已经安装好Maven插件 在Eclipse中新建Maven项目 [File]→[New]→[Other...] [Mave ...

  8. eclipse中新建maven项目-转

    http://huxiaoheihei.iteye.com/blog/1766986 博客分类: maven maven  maven是个项目管理工具,集各种功能于一身,下面介绍maven web项目 ...

  9. Eclipse中Maven WEB工程tomcat调试

    最近没事了玩一下maven,使用maven管理工程中的依赖包非常的方便.建立maven web工程的时候开始不知道怎么用tomcat来调试,总是使用mave的tomcat插件发布了后来调试,觉得非常的 ...

随机推荐

  1. 使用libxml2进行xml开发(一)

    (一)Windows下使用MinGW和Code::Blocks环境配置libxml2 笔者此次是在windows 7下使用MinGW和Code::Blocks开发C程式的,手上的一个项目需要使用soc ...

  2. Android 日常总结的一些方法使用

    1. setImageResource : 更改图片的资源 2. setClickable :  设置为true时,表明控件可以点击,如果为false,就不能点击 .  注意,setOnClickLi ...

  3. KeyChainWrapper - keychain简单使用

    1 keyChainWrapper是MRC代码,要禁用ARC -fno-objc-arc 2 要导入Security.framework框架 3 获得一个不变的UUID - (BOOL)applica ...

  4. MySQL(慢日志记录)

    day63 参考:https://www.cnblogs.com/wupeiqi/articles/5716963.html

  5. 程序猿的日常——Java基础之clone、序列化、字符串、数组

    其实Java还有很多其他的基础知识,在日常工作技术撕逼中也是经常被讨论的问题. 深克隆与浅克隆 在Java中创建对象有两种方式: 一种是new操作符,它创建了一个新的对象,并把对应的各个字段初始化成默 ...

  6. Ubuntu 16.04LTS安装Nginx

    Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev ...

  7. JAVA并发编程学习笔记------多线程调优

    1. 多线程场景下尽量使用并发容器代替同步容器 (如ConcurrentHashMap代替同步且基于散列的Map, 遍历操作为主要操作的情况下用CopyOnWriteArrayList代替同步的Lis ...

  8. Supporting Right-to-Left Languages

    For the most part iOS supports Right-to-Left (RTL) languages such as Arabic with minimal developer e ...

  9. 【PaddlePaddle系列】手写数字识别

      最近百度为了推广自家编写对深度学习框架PaddlePaddle不断推出各种比赛.百度声称PaddlePaddle是一个“易学.易用”的开源深度学习框架,然而网上的资料少之又少.虽然百度很用心地提供 ...

  10. kafka 消费者offset记录位置和方式

    我们大家都知道,kafka消费者在会保存其消费的进度,也就是offset,存储的位置根据选用的kafka api不同而不同. 首先来说说消费者如果是根据javaapi来消费,也就是[kafka.jav ...