【问题标题】:Where to get full source code for rt.jar? [closed]从哪里获得 rt.jar 的完整源代码? [关闭]
【发布时间】:2017-11-22 22:53:40
【问题描述】:

我正在为 Oracle JRE/JDK 6 Update 22 搜索 rt.jar 的源代码。 随附的 src.zip 不包含所有来源,例如 sun.*(例如 sun.reflect.Reflection)包丢失。

在哪里可以获得完整的 src.zip?

【问题讨论】:

  • 我不这么认为。但是你可以使用反编译器(我已经做过很多了:))
  • JDK 7 现在拥有所有源代码。
  • 不,Oracle JDK 7 仍然缺少很多,比如 sun 包。
  • 这是一个替代的 JDK7 RT.jar 源包,包含所有公开的源文件:jdk7src.sourceforge.net

标签: java


【解决方案1】:

sun.* 源是 JDK 的一部分,它是 Sun 专有的封闭源代码(或自 2010 年以来的 Oracle)。

话虽如此,您感兴趣的包(sun.reflect.)恰好包含在 OpenJDK 7 中,并且所有 OpenJDK 源代码都是开放的。

您可以在这里获取来源:http://jdk7src.sourceforge.net/

【讨论】:

  • (需要引用:) 但除此之外是一个很好的答案。来自我的 +1。
  • JDK8呢?
【解决方案2】:

编辑 2017-11-22:

这个答案写于 2010 年,当时的世界非常不同。如果您只需要 JRE 类的源代码,请在 JDK 构建中使用 JRE - 大多数现代 IDE 都可以识别包含的 src.zip 文件。

如果您真的非常需要完整源代码(如果您不确定,则不需要),然后找到合适的 OpenJDK 调试版本或从源代码构建 OpenJDK。


2010 年旧答案:

您可以从http://download.java.net/jdk6/source/下载JDK的完整源代码

非常重要的注意事项:这是在 Java 研究许可证下,它可能会以与您需要了解的内容不兼容的方式污染您。

【讨论】:

  • 注意:Oracle 已决定停止在 JRL 下为新版本提供 Java 6 源代码。
  • 死链接,请更新
  • @ShpytyackArtem 现在是 2017 年。你真的,真的需要 Java 6 的完整源代码吗?
  • @kiltek 请注意,src.zip 包含在任何现代 JDK 中,其中包括您在正常使用中会遇到的大多数类的源代码 - 如果您将项目 JRE 设置为 JDK,eclipse 会自动发现这一点。另请注意,除非您特别努力,否则 JRE 类将没有有调试信息。
  • @PratikAmbani 因为只有你提到的那些课程在那里? src.zip 并未涵盖 JVM 中的所有类,仅涵盖那些公开记录的类。 OpenJDK(调试版本)也适合您。
【解决方案3】:

如果您使用 Eclipse,您可以通过以下方式链接到 Java 源文件:

  1. 正如 Thorbjørn Ravn Andersen 所说,下载 JDK 源代码 http://download.java.net/jdk6/source/,然后将 tar.gz 文件解压缩到一个文件夹中,例如“jdk.src”;
  2. 打开引用来自 JDK 的基本 java 类(例如 Thread)的 java 文件;
  3. 点击 F3 打开声明,期望 Eclipse 打开一个带有“未找到源”消息的新选项卡。它要求提供 rt.jar 源位置,但您无需通过编译 JDK 源来获取它。相反,点击“附加源”按钮,在“源附件配置”弹出窗口中,选择“外部文件夹”,然后指向jdk.src/jdk/src/share/classes目录。 Eclipse 会自动在同一个窗口中加载新找到的 JDK 类源代码。

【讨论】:

  • 谢谢,但不包括sun.reflect.*
【解决方案4】:
【解决方案5】:

JDK 6 的 AFAIK 部分源自 OpenJDK 或集成到 OpenJDK 中。因此,也许您可​​以在这里找到更多见解:

【讨论】:

    【解决方案6】:

    没有源代码的类紧密基于 OpenJDK 的代码。您可以下载此源代码,您不仅可以看到 Java 代码,还可以看到 C 代码。这对于 JNI 示例也是一个很好的资源。

    【讨论】:

      【解决方案7】:

      Rustam 是对的:太阳源。* 不可用。但是你总是可以反编译 *.class 并看到非常可读的代码(不幸的是没有 javadocs :( )。

      【讨论】:

      • 许可证不允许这样做。
      • "许可证不允许这样做。"哎呀。这是一个很好的解决方法! ;)
      • 现代版本的 IntellJ 有一个反编译器,使这变得更容易。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2012-02-18
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多