JDK8盛行之时,我却连rt.jar都不知道在哪?
自从2017年jdk9发布以来,JPMS似乎成了标配,但之后已经出了两个LTS版本(11和17),jdk8依然很坚挺,我想为什么jdk8还能如此盛行,各种缘由离不了JPMS,JPMS出来这么久我都没听说过rt.jar,我很惭愧,所以我想乘着JDK8盛行之时好好撸一撸它,只怕:此情可待成追忆,只是当时已惘然。
我要搞清楚的问题:
- 什么是rt.jar?为什么要撸它。
一、什么是rt.jar?为什么要撸它。
rt.jar的存在由来已久,甚至可以追溯到它起源的时候,至少我知道的JDK7和8是有它的。
我之所以会忽略它,是因为我只关心源码的类和包,比如String类在java.lang包下。
rt.jar代表运行时jar(runtime.jar),包含引导类,我指的是来自核心JavaAPI的所有类。我发现很多Java程序员不知道什么是rt.jar?而且经常会被rt.jar文件的角色弄糊涂,或者为什么我们在Java中使用rt.jar文件?毫不奇怪,这个名字有点神秘。该文件始终位于JRE的lib目录中,至少在Windows和Linux中是这样。在MacOSX中,它位于不同的位置,也有不同的名称,即classes.jar,但这只是在JDK1.7之前。从Java7发布以来,苹果已经停止了Java的分发,如果您单独安装,它将与rt.jar同名。
许多开发人员认为将他们的类包含在rt.jar中以解决与类路径相关的问题,但这不是一个好主意。千万不要弄乱rt.jar,它包含JVM信任的类文件,并且在加载时没有对其他类文件进行严格的安全检查。
在本文中,我们将从Java世界了解一些关于这个神奇罐子的有趣的事情。对于那些不熟悉JAR文件的Java新手来说,JAR文件是一个类似zip的文件,确切地说是Java归档文件,它存储Java类文件和程序所需的任何资源。它还可以包含一个清单文件,其中可以包含使其成为可执行JAR的主类条目,可以使用java -jar命令运行该文件。
Java中关于rt.jar的要点
1.jar代表runtime,包含核心Java运行时环境的所有编译类文件。
2.您必须在类路径中包含rt.jar,否则您无法访问核心类,例如java.lang.String、java.lang.Thread、java.util.Array List或java.io.Input Stream以及java API中的所有其他类。通过使用Win-RAR或Win-Zip客户端打开rt.jar,您实际上可以看到它内部的内容。您可以看到,它不仅包含所有JavaAPI,还包含com包中指定的内部类。
3.在windows中,rt.jar将始终位于$JAVA_HOME/jre/lib下,其中$JAVA_HOME表示JDK安装目录。即使您不安装JDK而只安装JRE,您也会在完全相同的位置看到它,在$JAVA_HOME/lib目录中找不到rt.jar。顺便说一句,在MacOSX上它被称为classes.jar,位于/System/Library/Frameworks//classes目录下
在下面的屏幕截图中,您可以看到rt.jar位于Windows10中JRE的lib目录中。
4.rt.jar是所有Java包所在的位置。例如,如果类文件需要引用java.util.concurrent包中的类,例如concurrentHashMap,那么JVM将在rt.jar中查找它,从而使它能够正确运行。
5.Java程序员要问的另一个问题是,在哪里可以找到rt.jar中包含的类的源代码?好的,如果您安装了JDK,而不是JRE,那么您可以在$JAVA_HOME/src.zip文件中找到所有源代码。顺便说一句,sun.*源代码也包含在src.zip中,但这是Oracle专有的封闭源代码。我还建议您在Eclipse中包含这个JAR文件,这样您只需键入Ctrl +T和类名就可以查看任何JDK类的源代码,其余的将由Eclipse的Java类型搜索功能来处理。
6.关于rt.jar最重要的一点是,JVM知道这个jar文件中的所有类,这意味着JVM不会在从任何其他位置加载任何其他jar时执行所有检查。这是由于各种性能原因造成的,这就是为什么这些类由引导或原始类加载器加载。不要试图在rt.jar中包含类文件,因为Java不建议这样做。它也会损害任何安全性。
7.如果您对Java平台使用的不同二进制文件和JAR文件感到好奇,请查看此图。您可以看到JDK有三个主要文件夹bin、lib和jre。bin目录包含所有二进制可执行文件,例如运行java程序的java.exe、编译java程序的javac.exe等。lib包含tools.jar和dt.jar。jre文件夹再次包含bin和lib目录。它位于这个lib目录rt.jar中。
顺便说一下,要完整解释这些文件和文件夹的作用,请查看Oracle的官方页面。它们是非常全面和描述性的。
这就是Java中rt.jar文件的全部内容。现在您知道rt.jar的目的是什么,以及为什么不应该弄乱它。您可以在$JAVA_HOME/jre/lib目录中找到这个JAR文件,我鼓励您自己查看。
JDK8盛行之时,我却连rt.jar都不知道在哪?相关推荐
- 第98讲:使用SBT开发时动手解决rt.jar中CharSequence is broken等问题学习笔记
第98讲:使用SBT开发时动手解决rt.jar中CharSequence is broken等问题学习笔记 几乎所有从IDEA官网上下载安装在win上,采用默认方式自动运行的都 会遇到这个问题. er ...
- Access restriction required library rt.jar
在JAVA项目开发中,使用到了BASE64Decoder,但编辑运行时却会出现以下错误:Access restriction required library rt.jar,这里就详细的说明一下如何解 ...
- Maven 编译使用 rt.jar
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/catoop/article/details/63251628 项目在使用mvn clean pack ...
- Dockerfile文件创建centos:7,配置JDK8的环境变量,与运行springboot的jar包,的镜像
DockerFile文件创建centos:7 配置JDK8的环境变量 与运行springboot的jar包 准备文件 一:官网下载Linux的JDK包 https://www.oracle.com/j ...
- java string rt_如何使jvm加载我的java.lang.String而不是rt.jar中的那个
我认真研究了Java类加载器.现在,我想编写一个与rt.jar中的类之一具有相同的包名称和类名称的类.例如,我自己编写一个java.lang.String类,以及如何打破父级委托模型以使jvm加载我的 ...
- Jmeter读取Excel,BeanShell取样器调用rt.jar和jxl.jar
将rt.jar和jxl.jar,放在\apache-jmeter-5.0\lib\ext下面 import java.io.*; import java.util.ArrayList; import ...
- 解决IEDA编译java项目出现 library root ,编译缺少 rt.jar jce.jar
解决IEDA编译java项目出现 library root ,编译缺少 rt.jar jce.jar 问题 编译项目时,提示找不到rt.jar,编译添加后,出现缺少jce.jar,maven依赖项显示 ...
- php上传图片限制类型,php,_使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 。都是默认的配置,php - phpStudy...
使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 .都是默认的配置 使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 .都是默认的配置 $upl ...
- 构造方法与重载:定义一个网络用户类,信息有用户 ID、用户密码、 email 地址。在建立类的实例时把以上三个信息都作为构造函数的参数输入
构造方法与重载:定义一个网络用户类,信息有用户 ID.用户密码. email 地址.在建立类的实例时把以上三个信息都作为构造函数的参数输入, 其中用户 ID 和用户密码时必须缺省时 email地址是用 ...
最新文章
- 工业机器人原来可以这么酷,马斯克和中国美的都对它青睐有加
- 计算机机房规范管理,计算机中心机房建设及管理规范.doc
- 将pdf转为html,使用pdfdom将pdf转为html
- 重温java中的String,StringBuffer,StringBuilder类
- SELECT ANY DICTIONARY
- 免费的FTP linux 服务器中文,linux ftp服务器的搭建和中文字体乱码的解决
- SAP Spartacus如何为不同的environment设置不同的baseUrl
- java source folder作用_java项目把源码放到folder里,不是source folder,这个java代码还能被调用吗?...
- 大数据-MapReduce计算框架
- oracle rac升级补丁及中间的错误提示
- Ubuntu系统挂载U盘
- matlab中xlsread无法打开文件,Matlab xlsread打开文件并清理
- Idea复制文件一直updating indices
- 虚拟机VMware安装Windows7保姆级教程
- centos使用xfreerdp登录报错
- 2021直播电商下半场,“网易严选们”为何成主播良港?
- 如何Troubleshooting当Java Application发生死锁或Hangs
- 【Java】Java中的常用工具类(排名前 16)
- 张志华-统计机器学习-随机变量
- 差商近似1阶导数matlab,常微分方程的解法 (一): 常微分方程的离散化 :差商近似导数、数值积分方法、Taylor 多项式近似...
热门文章
- php textarea 默认值,html中的textarea属性大全(设置默认值 高度自适应 获取内容 限制输入字数 placeholder)...
- 3分钟告诉你,智能弱电为啥要学云计算!
- [音乐] The Mass(魔界传奇) (转)
- android vsync,Android vsync
- yanshee机器人代码
- 采用JSPGenCMS实现12380举报网站管理
- java控制pdf大小吗_Wicked_PDF / wkhtmltopdf不同控制器中pdf的不同字体和页面宽度大小...
- 报错 DOTWEEN ► Max Tweens reached: capacity has automatically been increased from 200/50 to 500/50.
- JAVA运算符与循环结构
- 低代码,是个伪命题吗?