jdk1.8以上的版本(jdk9,jdk11,jdk17等)没有jre的问题

前置条件

本文默认读者已经设置完毕了jdk运行的环境,javajavac相关的命令已经是可用状态。

一、解决问题

打开windows的命令行工具

打开 Windows powerShell(管理员),切记是管理员权限的 Windows powerShell ,这一步很重要!

进入jdk安装目录

执行 :

cd "C:\Program Files\Java\jdk-17"

我的版本是17,读者可以根据自己的jdk安装路径进入对应的安装目录

生成所需的jre

执行命令:

bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre

二、可能的问题

有的小伙伴执行完:C:\Program Files\Java\jdk-17>bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre
出现错误提示:错误: C:\Program Files\Java\jdk-17\jre
原因是:Windows powerShell 并没有使用管理员身份打开。

三、探究原因:为什么jdk1.8之后的jdk不再单独安装jre了?

我们首先可以从 Oracle 的 Java SE 9 的下载页初见端倪:

WARNING: These older versions of the JRE and JDK are provided to help developers debug issues in older systems. They are not updated with the latest security patches and are not recommended for use in production.
警告:提供这些旧版本的JRE和JDK是为了帮助开发人员调试旧系统中的问题。它们未使用最新的安全修补程序进行更新,不建议在生产中使用

我觉得这也是自从JDK 9开始引入 module system 之后,自然而然的动作。
Java平台的领导者们意识到了随着虚拟化、容器化、微服务化的普及和流行,以前庞大的JRE已经跟不上时代的发展:作为一个运行时,里面经常包含了太多不需要的东西。
比如,如果一台主机上的某个JRE仅仅是用来运行Apache Tomcat,那么JRE中用来支持SWT的部分肯定是不需要的,即浪费空间又降低效率。引入module system,使得开发者能够按自己的应用创建一个最小的运行时成为了可能——你的一个微服务的部署应用仅仅需要一个非常小的 runtime(比如仅仅20m)——而不是像以前一样不管应用复杂还是简单,都需要一个上百兆的JRE作为运行 runtime,横向扩展和部署的效率将能大幅提升。
作为一个Java开发者,这个改变我觉得是值得让我们高兴的,这是一种进步,说明了Java平台一直在尝试紧跟时代,而不用担心被淘汰。
回到最初引用的那句话——因为你可以用jlink根据自己的需求,创建一个更小的运行时,而不是不管什么应用,都是同样的JRE。

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值