我使用系统属性java.class.path
来查找属于类路径的所有jar和目录。在第一个sigth,这似乎很好。但仔细观察后,我发现当我使用gradle执行程序时,此类路径中没有rt.jar
。当从IntelliJ IDEA执行时,'rt.jar'是该类的一部分。
为什么IntelliJ和Gradle之间的类路径以这种方式不同?
要明确一点:rt.jar
中包含的所有类都被加载得很好,这只是令我困惑的属性。
答案 0 :(得分:4)
rt.jar不需要在类路径中,因为它已经在bootclasspath中。 从类路径中删除它是安全的。
您可以参考此Oracle文档:http://docs.oracle.com/javase/8/docs/technotes/tools/findingclasses.html
Java Launcher如何查找Bootstrap类
Bootstrap类是实现Java 2平台的类。 Bootstrap类位于rt.jar和jre / lib目录中的其他几个jar文件中。这些归档由bootstrap类路径的值指定,该路径存储在sun.boot.class.path系统属性中。此系统属性仅供参考,不应直接修改。
您不太可能需要重新定义引导类路径。非标准选项-Xbootclasspath允许您在那些需要使用不同核心类的稀有cicrcumstance中这样做。
答案 1 :(得分:3)
默认情况下,JVM中有三个ClassLoader:
您可以通过打印java.lang.ManagementFactory.getRuntimeMXBean().getBootClassPath()
在引导类路径上看到rt.jar。我不熟悉IDEA,所以我不知道为什么IDEA在java.class.path中包含rt.jar,但我怀疑它是多余的,因为无论如何这些类都将由引导类加载器加载。
答案 2 :(得分:0)
File -> Project Structure -> SDKs
(Mac上的IDEA)
您将看到IDEA已帮助您加载所需的类。