Sun 最近通过 Sun 社团源代码许可(Community Source License,SCSL)和 Java 研究许可(Java Research License,JRL)发布了 JDK 5.0 的源代码。这个月,Tiger 的专栏作家 John Zukowski 从新发布的细节中抽空出来,概述了许可的条款以及为开发人员提供了哪些源代码访问。他还简要介绍了一下 J2SE 6.0 发行版 Mustang 令人惊奇的早期访问。请在本文对应的 讨论论坛 与作者和其他读者分享您对本文的想法。(您也可以单击本文顶部或底部的 讨论 访问论坛。)
Sun 发布 JDK 5.0 源代码的决定,除了提供对公共类的访问之外,还提供了对非公共类的访问,这给了开发人员更深入了解最新发行版幕后内容的机会 —— 前提是您不介意遵守许可条款。我不会卷入所谓“Sun 是不是应该把 Java 平台开源”的争论,而是向您展示如何得到源代码并讨论两个许可选项:Sun 社团源代码许可(SCSL)和 Java 研究许可(JRL)。我还会简要地讨论 6.0 Mustang 二进制和源码的早期访问快照版本。
标准源代码下载
Java 平台公共 API 的源代码和 Javadoc 中提及的所有类都属于标准 JDK 交付的一部分,您可以访问它们。为访问这些源文件,您需要将它们与 JDK 下载安装在一起。如果给出大小(18 MB),那么 JDK 下载是可选的,所以您必须确保在下载的时候选择了该下载。安装之后,只需把文件解压到子目录中即可,如清单 1 中演示的那样。
清单 1. 返回 1.4 默认的 Steel 主题
cd c:\jdk1.5.0
mkdir src
cd src
jar xvf ..\src.zip
现在,如果您在开发代码的时候遇到问题,得到意外的堆栈转储,您就可以查看系统类的源代码,看看是为什么。例如,用 null 参数调用 StringBuffer 构造函数是不对的。为什么呢?查看源代码,就了解到,构造函数试图取得 string 的长度。虽然在 Javadoc 中有文档说明, StringBuffer 构造失败会抛出 NullPointerException 异常,但是查看源代码可以让您知道 为什么 会失败。因为您不能对 null 对象指针调用 length 方法。
注意: 源文件保存为具有 Unix 换行符,如果用记事本(Notepad)这样的编辑器查看源代码,阅读起来会很困难,因为文件中没有回车符。如果您想转换这些文件,那么 JavaWorld 的 Java Tip 64仍然会有用。
JDK 5.0 源代码包
JDK 没有提供平台的全部源代码。提供了 java.* 和 javax.* 包中的公共类,但是没有提供 sun.* 或虚拟机中的公共类。JDK 5.0 源代码包就是弥补这个不足的。如果您能够遵守其中任何一个许可的条款(稍后介绍),那么您就可以访问平台(允许 Sun 公开的平台)的完整源代码。这两个许可许可了一些东西,但是它们也有自己的再发布限制。您可以从 Java 2 Platform Standard Edition 5.0 页面访问源代码。只要单击您要遵守的许可的下载链接,阅读并接受许可条款,然后单击第一个下载链接,就会显示组的文件列表。这时,有两个下载链接,一个是 55 MB 的 zip 格式的源代码文件,另一个是安全性文件(例如加密供应者),只有不到 1 MB。下载源文件,解压后就可以研究了。还有另外一个 2 MB 的二进制文件下载,它包括共享库、字体和图片。有它更好,没有也可以。