为什么我们在一个java项目中使用rt.jar?

什么是rt.jar的必要性?

rt =运行时间

它包含所有的Java运行时库。 (必要)

它包含了Java运行时环境中提供的所有类。

如果您的类path中没有它,则无法访问您需要使用的任何类,如java.lang.String或java.io.File。

交叉编译是你必须明确使用它的一种情况。

例如,如果您使用Java 8,并且希望在拒绝Java 8扩展的同时编译Java 7。 所以你可以尝试:

javac -source 1.7 Main.java 

但是,然后javac会说: warning: [options] bootstrap class path not set in conjunction with -source 1.7 ,因为它可能会产生错误合作编译对不同版本的JCL。

所以你需要设置rt.jar

 javac -source 1.7 -bootclasspath /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar Main.java 

这是要求: 警告:[选项] bootstrap类path未与-source 1.5一起设置

它包含Java内置的类。 rt也许代表Runtime 。 没有它,你不能运行Java程序:)

rt.jar是所有java包所在的地方。 例如,如果一个类文件调用java.util包,则JVM可以在rt.jar中查找它,从而使其能够正确运行。

旁注:不要乱用它。

rt.jar代表运行时JAR并包含引导类,我指的是来自Core Java API的所有类。 我发现很多Java程序员不知道什么是rt.jar? 并经常与rt.jar文件的作用或为什么我们在Java中使用rt.jar文件混淆? 毫不奇怪,这个名字有点神秘。

这个文件总是驻留在JRE的lib目录中,至less在Windows和Linux中。 在MacOSX中,它位于不同的位置,也有不同的名称,即classes.jar,但这只是在JDK 1.7之前。 从Java 7发行版开始,Apple停止发行Java,如果单独安装,它将与rt.jar具有相同的名称。

许多开发人员认为在rt.jar中包含他们的类来解决类path相关的问题,但这是一个坏主意。 你不应该搞乱rt.jar,它包含的是JVM所信任的类文件,并且没有严格的安全检查来加载其它类文件。

运行时(rt.jar)包含构成Java SE的所有(大部分)Java类。 它会自动添加到类path中。

它包含所有标准的JDK类。 在JVM的类加载过程中,这是第一个被加载的类,由所有类加载器的父类的引导类加载器完成。

你可以用这个选项编译一个java程序自己检查一下:

 javac -verbose:class program.java 

以便查看加载的类的顺序。

样品:

 [Loaded sun.security.timestamp.TimestampToken from /usr/lib/jvm/java-8-oracle/jre/lib/rt.jar] [Loaded sun.security.util.CertConstraintParameters from /usr/lib/jvm/java-8-oracle/jre/lib/rt.jar] [Loaded sun.security.util.ECKeySizeParameterSpec from /usr/lib/jvm/java-8-oracle/jre/lib/rt.jar] [Loaded sun.security.util.ECUtil from /usr/lib/jvm/java-8-oracle/jre/lib/rt.jar] [Loaded sun.security.util.Pem from /usr/lib/jvm/java-8-oracle/jre/lib/rt.jar]