JavaJDKJRE中的rt.jar是什么?为什么重要?
最近发现,在idea中查看util包的源码时,发现⼏乎所有的Core APIs,都位于rt.jar这个路径下,例如util包,lang包等,csdn上⼏乎都不到rt.jar相关的介绍,因此google了下,到了⼀篇相关的⽂章,以此记录,分享⼀下,翻译有调整,末尾附英⽂原版。
Java / JDK / JRE中的rt.jar是什么?为什么重要?
rt.jar代表runtime JAR,并且包含引导类(bootstrap classes)——来⾃Core Java API的所有类。很多Java开发都不知道什么是
rt.jar?经常混淆rt.jar⽂件的作⽤,或疑惑在Java中为什么使⽤rt.jar⽂件?
Windows和Linux中,rt.jar位于JRE的lib⽬录下。JDK 1.7之前,MacOSX中叫classes.jar,从Java 7开始也改为rt.jar。很多开发尝试把⾃⼰的类放进rt.jar中,来解决与类路径相关的问题,但最好不要这样做,因为rt.jar包含了JVM信任的class⽂件,JVM加载时不会对其他class⽂件进⾏严格的安全检查。
在本⽂中,我们将讨论与rt.jar相关的内容。对刚接触Java⽽且不熟悉JAR⽂件的开发来说,rt.jar是⼀个类似zip的压缩⽂件,精确称
为“Java archive”(Jar),存储了Java class⽂件和程序所需的全部资源。它还可以包含mainfest⽂件,还可以包含Main-Class条⽬,变成可执⾏JAR,使⽤java -jar命令来运⾏。
1. rt.jar代表runtime,包含所有核⼼Java 运⾏环境的已编译calss⽂件。
2. 必须在类路径中包含rt.jar,否则您⽆权访问核⼼类,例如 java.lang.String,java.lang.Thread,java.util.ArrayList或
java.io.InputStream等,以及所有Java API中的其他类。 可以使⽤IDE打开并查看rt.jar中的内容, 它不仅包含所有Java API,还包含com包中指定的内部类。
3. 在windows中,rt.jar位于$ JAVA_HOME / jre / lib下。 即使没有安装JDK并且只安装JRE,也会在完全相同的位置看到它,在$
JAVA_HOME / lib⽬录中不到rt.jar。 顺便提⼀句,在MacOSX上,它被称为classes.jarand,位于/ System / Library / Frameworks // Classes⽬录下。 下⾯的截图中,可以看到rt.jar位于Windows 中JRE的lib⽬录中。
4. rt.jar是所有Java包所在的位置。例如,需要从urrentpackage引⽤类,⽐如 ConcurrentHashMap,JVM会从rt.jar为什么使用bootstrap?
中查它,从⽽使程序能够正确运⾏。
5. 另⼀个Java开发常问的问题,在哪⾥可以到rt.jar中包含的类的源码呢?安装了JDK的可以在$ JAVA_HOME / src.zip⽂件中到
所有源码。BTW,sun.* 源码也包含在src.zip中,但这是专有的闭源Oracle代码。 建议在Eclipse中添加这个JAR⽂件,只需键⼊Ctrl + T和类名就可以查看任何JDK类的源码,其余部分将由Eclipse的Java类型搜索功能处理。
6. 关于rt.jar⼀个很重要的事就是,JVM知道这个JAR⽂件中的所有类,这意味着JVM在从任何位置加载时都不会执⾏检查。 之所以这
样做是由于各种性能原因,这就是为什么这些class由bootstrap或primodial类加载器加载的原因。 所以最好不要尝试将⾃⼰类⽂件包含在rt.jar中,Java官⽅也不建议这样做。
7. 如果对Java平台使⽤的不同⼆进制⽂件和JAR⽂件感到好奇,看下图,JDK有三个主⽂件夹bin,lib和jre。 bin⽬录包含所有⼆进制
⽂件,可执 运⾏Java程序,编译Java程序。lib⽬录包含tools.jar和dt.jar。 jre⽂件夹中也包含了bin和lib⽬录。
rt.jar就在这⾥的lib⽬录中。 BTW,如果想全⾯理解每个⽂件和⽂件夹的功能,请查看Oracle官⽅介绍,⾮常全⾯和具体。
以上就是关于rt.jar⽂件的全部内容。 现在知道rt.jar的⽬的是什么,以及为什么你不应该惹它了吧。 你还可以在$ JAVA_HOME / jre / lib ⽬录中到JAR⽂件,建议亲⾃看下。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。