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

时间:2010-06-22 07:18:29

标签: java

rt.jar的必要性是什么?

9 个答案:

答案 0 :(得分:51)

它包含Java R un t ime环境中提供的所有类。

如果你没有在你的类路径上拥有它,你将无法访问任何需要使用的类,如java.lang.String或java.io.File。

答案 1 :(得分:40)

rt =运行时间

它包含所有java运行时库。 (基本)

答案 2 :(得分:11)

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

,例如,如果您使用的是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

这是在warning: [options] bootstrap class path not set in conjunction with -source 1.5

询问的

答案 3 :(得分:9)

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

此文件始终位于JRE的lib目录中,至少在Windows和Linux中。在MacOSX中,它驻留在不同的位置,并且具有不同的名称,即classes.jar,但这仅在JDK 1.7之前。从Java 7版本开始,Apple已停止分发Java,如果单独安装,它将与rt.jar同名。

许多开发人员都认为将他们的类包含在rt.jar中以解决与类路径相关的问题,但这是一个坏主意。你永远不应该弄乱rt.jar,它包含JVM信任的类文件,并且加载时没有对其他类文件进行严格的安全检查。

答案 4 :(得分:7)

它包含Java内置类。 rt可能代表Runtime。没有它你就无法运行Java程序:)

答案 5 :(得分:5)

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

旁注:不要乱用它。

答案 6 :(得分:4)

运行时(rt.jar)包含构成Java SE的所有(大多数..)java类。它会自动添加到类路径中。

答案 7 :(得分:4)

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

您可以通过使用此选项编译java程序来自行检查:

javac -verbose 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]

答案 8 :(得分:1)

rt.jar代表运行时JAR,包含引导类,我的意思是Core Java API中的所有类。我发现许多Java程序员都不知道rt.jar是什么?并经常与rt.jar文件的角色或为什么我们在Java中使用rt.jar文件混淆?毫不奇怪,这个名字有点神秘。至少在Windows和Linux中,此文件始终位于JRE的lib目录中。在MacOSX中,它位于不同的位置,并且具有不同的名称,即classes.jar,但这仅在JDK 1.7之前。从Java 7版本开始,Apple已停止分发Java,并且如果您单独安装,它将与rt.jar同名。许多开发人员认为将其类包含在rt.jar中以解决与类路径相关的问题,但这不是一个好主意。您永远不要搞混rt.jar,它包含JVM信任的类文件,并且在加载时没有严格的安全性检查(对于其他类文件)。在本文中,我们将从Java世界中学习有关此神奇JAR的一些有趣的东西。对于那些不熟悉Java且不熟悉JAR文件的程序员而言,它是一个类似zip的文件,精确称为Java归档文件,用于存储Java类文件和程序所需的任何资源。它还可以包含mainfest文件,该文件可以包含Main-Class条目以使其成为可执行JAR,可以使用java -jar命令运行该文件。

关于Java中rt.jar的重要提示

  1. rt.jar代表运行时,并且包含核心Java Runtime环境的所有已编译类文件。

2)您必须在类路径中包含rt.jar,否则您将无法访问核心类,例如java.lang.String,java.lang.Thread,java.util.ArrayList或java.io.InputStream以及Java API中的所有其他类。您实际上可以通过使用WinRAR或WinZip客户端打开rt.jar来查看里面的内容。您可以看到它不仅包含所有Java API,而且还包含com软件包中指定的内部类。

什么是Java中的rt.jar

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在Windows 8中的JRE的lib目录中。

在Windows,Linux和MacOSX中找到rt.jar的位置

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在从任何Java加载任何其他JAR时不会做它所做的所有检查。其他地方。这样做是出于各种性能原因,这就是为什么这些类由引导程序或原始类加载器加载的原因。不要尝试将您的类文件包含在rt.jar中,这是Java所不建议的。它还会损害任何安全性。

7)如果您对Java平台使用的不同二进制文件和JAR文件感到好奇,请查看此图。您可以看到JDK具有三个主要文件夹bin,lib和jre。 bin目录包含所有二进制可执行文件,例如java.exe运行Java程序,javac.exe编译Java程序等。lib包含tools.jar和dt.jar。 jre文件夹再次包含bin和lib目录。它位于rt.jar所在的这个lib目录中。为了全面解释这些文件和文件夹的功能,请查看Oracle官方页面。它们非常全面且具有描述性。

JDK JRE中的基本文件夹和文件

关于Java的rt.jar文件。现在您知道rt.jar的目的是什么,为什么不应该搞砸它。您可以在$ JAVA_HOME / jre / lib目录中找到此JAR文件,建议您自己查看。

了解更多:https://javarevisited.blogspot.com/2015/01/what-is-rtjar-in-javajdkjre-why-its-important.html#ixzz5icL7sAMZ