https://zhuanlan.zhihu.com/p/45824326
这个跟java 9提供的jigsaw有关
先说第一点,你应该避免使用oracle jdk而应该使用open jdk,去openjdk.java.net上下载,而不是java.com上下载
因为oracle jdk顾名思义,是oracle的版权产品,open jdk免费开源的真jdk
9之后的jdk,已经模块化了,模块化之后,就不再区分jvm,jre和jdk了
过去jvm是jre的子集,jre对比jvm多了rt.jar标准包的内容
而jre是jdk的子集,jdk对比jre多了javac等工具
那么9的jigsaw之后,所有这些,都被拆成了一个又一个jmod,模块
比如java.base.jmod,jdk.javac.jmod等
那用户可以根据自身需要,自由组合出自己的runtime,而这个runtime可能是jdk
也可能是jre+jdk的一部分,也可能是jre的一部分+jdk的一部分,或者干脆就只有jvm的一部分
而且用户可以添加第三方提供的native扩展,比如常见的两个扩展是javafx(gui)和graal(多语言)扩展,graal 19.3多语言扩展将会在2019的11月19日发布,到时候你可以利用该工具扩展出支持javascript,python,ruby,r等语言的运行时(runtime),javafx等下说
甚至java提供了jaotc可以将整个runtime精简,做成binary二进制机器码,就跟c等语言一样了
所以这个时候再提供jre就毫无意义了,因为这跟以前你拿一个jar出来,然后所有有jre的地方都能运行不一样了
如果你的jar依赖的jmod不在你自己做的runtime里面,那还是运行不了
所以就不再提供jre了,你需要的话,用jlink自己制作runtime
参考我的专栏文章:
圆胖肿:我的Java(定制你的Java/JavaFX Runtime)
这篇专栏文章中介绍了如何定制一个java的runtime的子集,同时添加了gui的扩展
来源:https://www.cnblogs.com/jinanxiaolaohu/p/12613668.html