通过Ant编译JDK

11

我想编译jdk文件以包含调试信息。我想使用ant,因为它已经包含在我的NetBeans环境中,所以我做了以下操作:

  1. 在一个临时目录中解压/src.zip
  2. 在我的临时目录中创建一个非常简单的build.xml文件(一个默认目标,一个任务):
    <?xml version="1.0" encoding="UTF-8"?>
    <project name="CompileJDK" default="default" basedir=".">
    <target name="default">
    <javac srcdir="."
             destdir="jdkwd"
             debug="on"
    />
    </target>
    </project>
  1. 创建一个名为jdkwd的目录
  2. 无参数启动ant(只有 >log.txt)

这会导致100个编译错误,例如:

    [javac] C:\jdkdebug\java\awt\Window.java:196: cannot find symbol
[javac] symbol  : class IdentityArrayList
[javac] location: class java.awt.Window
[javac]     private static final IdentityArrayList<Window> allWindows = new IdentityArrayList<Window>();

我在我的计算机上只安装了一个JDK,所以我不知道为什么它无法解决所有这些引用。

更新: 这些未解决的引用中大部分都属于以下包:

sun.awt.util

现在问题已经被更正为:缺失的 JDK 文件在哪里?


好的,我已经设置了悬赏并且现在它即将到期。许多答案指出该过程并不“容易”,也许这些来源并不打算被编译,并且没有提供这样做的方法。由于没有一个单一的、积极的答案,我让一半的悬赏自动分配给得票最多的答案。 - AgostinoX
5个回答

11

构建JDK本身是一个复杂的过程,不可能通过简单的javac调用包装在ant工程中来实现。

您需要查看OpenJDK Build README以获取有关如何为您的平台构建的说明。


8

http://www.oracle.com/technetwork/java/faq-141681.html

A14. 我可以在哪里获取Java编程语言源代码?
Java软件有两个单独的源代码包,您可以免费获取:
Java 2 SDK标准版本身包含一个名为src.zip的文件,其中包含java包中公共类的源代码。由于这不包含sun.*类,因此您无法从这些源文件进行完整的Java技术构建。这些源文件仅供您参考,以补充文档,以便您了解Java技术的工作原理。
完整的源代码版本可通过访问社区源代码许可网站从我们这里获得。
社区源代码链接不正确:现在应该是 http://download.java.net/openjdk/jdk7/

4
根据这篇文章(发表于2007年),编译JRE源代码需要在类路径中包含rt.jar和tools.jar。
然而,我尝试了这种方法,但对我不起作用(100个错误)。
Java bug请求调试符号的christhielen帖子中有更详细和较旧(2004年)的说明。

4
尝试在javac命令中添加一个classpath
<classpath path="/PATH/to/missing_class/" />

另外,尝试使用-d和-v选项运行ant。 这会产生大量输出,但会向您显示它正在搜索类的位置。


浏览了这些错误后,我发现我的源代码完全缺少sun.* 包。上面的符号指的是sun.awt.util.IdentityArrayList。这怎么可能呢? - AgostinoX
据我所知,他们没有为许多(任何?)内部包提供源代码。 - Dave Newton
我认为Sun类不是标准的一部分。你使用的JVM是什么? - Paul Rubel
我使用HotSpot 1.6,但是JDK不应该独立于JVM吗?@dave:但是当我使用NetBeans进行调试时,我看到了那些源代码! - AgostinoX
太阳类是JVM的一部分。你是否将rt.jar添加到类路径中了? - Stephan

2
如果您使用 Gentoo,编译 OpenJDK 就如简单地运行 emerge dev-java/icedtea
有一个 debug use flag 可以关闭所有优化,我自己没试过,但很可能这正是您想要的。如果不是的话,更改构建脚本应该并不困难,但需要您学习一些 portage 的知识。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接