为什么我们在一个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]