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文件,我鼓励您自己查看。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值