深入理解EclipseJRE环境:Eclipse配置多版本Java环境

前言

本周起学校开设了软件构造课,课程详情与6.031: Software Construction (mit.edu)相似,按照其中以及同学分享的往届实验内容中的要求,需要使用JDK8、9或者10。然而由于之前小学期学习的JAVA课程,电脑上已经安装了JDK16,故考虑能否实现两个版本的JDK共存。经过查询资料,耗费了半天精力后总算成功,期间遇到了一些问题,考虑到网络上目前没有关于设置多版本JDK时出现问题的详细解释,故在此记录下我配置过程中遇到的问题和解决思路,以供朋友们和自己今后作参考。

本文中的示例针对Windows10下Eclipse2021-06,在已有JAVA16的情况下配置JAVA10多版本共存。

如果想直接进行配置,可以直接看总结部分

目录

安装JDK

官方下载网址:Java Downloads | Oracle

由于校园网较慢,借用同学的会员从百度网盘上下载,jdk10.0.2百度网盘(转载自JDK10下载|JAVA JDK V10.0.2 官方版 百度网盘下载_当下软件园_软件下载 (downxia.com)):

https://pan.baidu.com/s/1OBkRDxEBcXZ0tWwc6hyE1Q

提取码:69zz

下载完安装包后按照提示安装即可,建议将两个版本的JAVA放在一个大目录下并命名,个人文件目录如图:
在这里插入图片描述

配置环境变量

对于单个版本的JDK,环境变量的配置网上有许多教程,此处为了方便多版本同时使用,借鉴了 三个步骤教会你自由切换JDK版本,超级简单!__阿洋的博客-CSDN博客_怎么切换jdk版本的做法

首先设置两个版本的JAVA_HOME变量,分别命名为JAVA10_HOME和JAVA16_HOME,再定义真正的环境变量JAVA_HOME为二者之一,之后想更换版本时只需要修改这里的值就好了,如图显示是使用JDK10的环境变量,使用16只需将JAVA_HOME定义为%JAVA16_HOME%即可
在这里插入图片描述

然后与单版本的JAVA配置相同,在path中加入当前JAVA_HOME下方对应的bin
在这里插入图片描述

这就完成了多版本的环境变量配置

为测试是否配置成功,只需在cmd中输入命令java -version(-的数量一个两个与不同版本有关):

在这里插入图片描述

显示了正确版本的信息,代表环境变量配置成功

环境变量真的必须吗?

完成所有的配置后猜测如果只使用Eclipse开发的话不需要配置环境变量,删去环境变量JAVA_HOME后实测仍能运行hello world程序,具体原因见之后的说明

在Eclipse中设置JRE

Eclipse中Window中preference选项可以调整当前工作环境的配置,参考网络资料发现其中Java标签下的Installed JRES标签是java运行的关键,JRE全名为Java Runtime Environment,java在编译完成后会交由这个运行时环境中的解释器进行解释,逐行运行Java字节码,不同版本的编译器编译出的字节码应当交由对应的不同版本的环境进行解释运行。

Installed JRES中默认情况下包含eclipse内置的一个JRE,为了实现多版本共存,需要加入本地安装的JRE。然而参照网络教程将目录设置为安装目录下的JRE目录(与自带的格式相仿,本文中对应的为D:\JAVA\JAVA10\JRE)后无法运行hello world代码,且按照同样方式配置了JAVA16的JRE目录后小学期时能运行的代码同样出现了异常,多次试验后发现每次新建项目在不加入任何文件的情况下就会产生错误,查找eclipse使用教程,调用Problem窗口查看,发现错误:

Failed to init ct.sym for D:\JAVA\JAVA10\JRE\lib\jrt-fs.jar

查询资料,网络上的解决方案是将自带的JRE换为自己的,然而我们已经做了这件事。

就在一筹莫展之时,注意到网络教程中添加JRE目录的方式中提到,JDK14及以后版本的JRE目录不应设置为安装目录下的JRE文件夹,而是应当直接设置为安装目录,虽然我们使用的版本更低,但考虑到使用16版本时同样的问题,将目录修改为了安装目录,如下:

在这里插入图片描述

其中第三行的JRE为自带,至此所有的设置均已完成,此时如果运气好,项目的其他设置没问题能对应上,程序就能跑起来,我们也就实现了多版本共存。

然而,又以不同方式建立了几个工程后发现,并不是每次、每种设置都能正常运行,为什么?

这就需要了解一下Eclipse中不同版本JRE的组合方式。

Eclipse中不同版本的组合方式

在这里插入图片描述

这是新建项目时JRE的选项,有了刚才查询的一些资料,这三个选项对应的应该是不同的JRE版本,之前配置的问题也出在此处,同时本人发现,在刚刚设置中Installed JRES中有一个下属标签页,Execution Environment,刚好对应第一项,其中的设置是这样的:

在这里插入图片描述

猜测这是不同的Execution Environment对应的不同JRE的表,而Eclipse中可以为不同的执行环境对应的不同的JRE,同名的环境能对应多个JRE,并且可以在这个标签页中进行修改。

测试后发现上方新建项目时如果选择了对应的Execution Environment和第二项中已经添加到Installed JRES中的JRE,最终得到项目中的Library的目录都是相同的,这就印证了这个猜测,查询到资料同样指向这个解释:

在这里插入图片描述

观察到高级版本的JRE总是出现在较低版本的Execution Environments中,考虑到JRE的向后兼容(新版本可以运行老版本的代码),也从另一方面印证了这个猜测。

关于Eclipse中不同版本的JRE总结如下:

  • Execution Environments是JRE的另一个名字,它代表了某个特定的JRE,这个JRE可以运行当前Execution Environments对应版本的java字节码
  • 新建项目时JRE的选择:
    • 第一项代表选择一个Execution Environments对应的那个JRE,此处的Execution Environments作用仅仅是对不同JRE版本以及向后兼容性的一个助记符。如果使用了低版本的Execution Environments,但对应了高版本的JRE,也就是利用了向后兼容性,那么会得到一个警告。
    • 第二项代表选择一个已经将目录添加到Eclipse环境中的JRE
    • 第三项代表选择第二项中的全局默认值(全局默认值可以在上面添加JRE目录的地方(即Installed JRES)中设置)

在Eclipse中设置编译级别

除了JRE的版本之外,还需要将编译级别也设置为对应的版本,在Preference\Java\Compiler中设置Compiler compliance level即可。

注:此处设置的同样是全局默认值,如果在新建项目时设置了其他版本的JRE,Eclipse会提示并修改单独针对这个项目的编译级别。

总结

配置多版本JAVA的步骤如下:

  • 下载想要版本的JDK并安装,最好将所有版本的java安装在一个大目录下
  • 设置环境变量(如果只使用Eclipse可以跳过这一步,但是在命令行中调用Java和使用其他利用命令行的软件都需要配置环境,建议一步到位)
  • 将JRE添加到Eclipse中的Window\Preference\Java\Installed JRES下,注意添加的目录应当是这个版本java的安装目录,而不是安装目录下的JRE子目录,之后设置全局默认值
  • 设置Window\Preference\Java\Compiler中的Compiler compliance level,应当与JRE的默认版本相同
  • 在Installed JRES的子标签Execution Environment中设置不同版本Execution Environment对应的默认JRE

在新建项目时选择需要的版本即可,JRE的三个选择可以参看Eclipse中不同版本的组合方式一节中的总结部分

参考资料

检测配置成功:查看本地jdk版本型号_高数老师的博客-CSDN博客_查看本地java版本

多版本JDK环境变量配置(此文章命名吸引人,然而并不能实际解决Eclipse中的问题): 三个步骤教会你自由切换JDK版本,超级简单!__阿洋的博客-CSDN博客_怎么切换jdk版本

向后兼容:向前兼容与向后兼容 - 知乎 (zhihu.com)

报错的处理: eclipse新建java项目报错 jrt-fs.jar_starymiao的博客-CSDN博客

由于博客是在问题解决后心血来潮所写,有些参考过的资料已经忘记了,只能列出这么多

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值