使用ant重新编译jdk 加入调试信息

1>下载安装 apache-ant-1.9.2  (解压apache-ant-1.9.2-bin.zip)

2>配置环境变量

window中设置ant环境变量:

ANT_HOME    D:\Soft\apache-ant-1.9.2

path                 %ANT_HOME%/bin

classpath       %ANT_HOME%/lib

3>验证ant

cmd  输入  ant

如果出现如下内容,说明安装成功:

https://img-my.youkuaiyun.com/uploads/201211/12/1352718174_5230.png

Buildfile: build.xml does not exist!

Build failed

查看版本:ant  -version

使用:
(1)在D盘根目录下建立build.xml

1 <? xml version="1.0" encoding="GBK" ?>
2 < project  name ="测试脚本"  default ="copyfile"  basedir ="."   >
3     < target  name ="copyfile" >
4        < copy  file ="d:/a.txt"  todir ="e:/Temp"  overwrite ="true"   />
5     </ target >
6 </ project >

在D盘根目录下建立文件a.txt。

进入dos,   d:     然后   ant

此时可在E:/Temp目录下见到文件aa.txt,内容与a.txt一样,即拷贝成功!



=====================================================================================================

ant编译jdk

当用eclipse调试jdk源码的时候,会发现里面的局部变量的值无法看到,这是因为sun在编译jdk的时候,没有加入调试信息。下面就介绍用ant如何重新编译jdk,加入调试信息。

接下来是编写build.xml文件,build.xml文件如下:


<?xml version = "1.0" encoding = "UTF-8" ?>
<project name="create rt_debug.jar" default="makejar" basedir=".">
 
    <!--  初始化任务  -->
    <target name="init">
        <tstamp/>
        <property environment="env"/>
        <property name="project.build" location="build"/>
        <property name="project.src" location="${project.build}/src"/>
        <property name="project.classes" location="${project.build}/classes"/>
        <property name="project.dist" location="${project.build}/dist"/>
        <property name="project.classesJarRoot" location = "rt" />
        <property name="debuglevel" value="source,lines,vars" />
        <path id="project.classpath">
            <pathelement location = "${project.classesJarRoot}" />
        </path>
    </target>
 
    <!--  删除任务 -->
    <target name="clean" depends="init">
        <delete dir="${project.build}" quiet="true"/>
        <mkdir dir="${project.build}"/>
    </target>
 
   <!--  加压JAVA_HOME/src.zip -->
    <target name="unpack" depends="init, clean">
        <unzip src="${env.JAVA_HOME}/src.zip" dest="${project.src}"/>   
    </target>
 
    <!-- 通过javac重新编译源文件  -->
    <target name="build" depends="unpack">
        <mkdir dir="${project.classes}"/>
        <javac srcdir="${project.src}" classpathref="project.classpath"
            destdir="${project.classes}" debug="on" 
            fork="true" memoryMaximumSize="512m" failοnerrοr="false" nowarn = "true" debuglevel = "${debuglevel}">
            <!-- talk to the hand troublesome libs -->
            <exclude name="org/apache/xpath/domapi/XPath*.java"/>
            <exclude name="com/sun/corba/se/internal/Interceptors/Thread*.java"/>    
            <exclude name = "com\sun\java\swing\plaf\gtk\*.java" />
        </javac>
    </target>
 
    <!--  打包编译好的class文件到rt_debug.jar中 -->
    <target name="makejar" depends="build">
        <mkdir dir="${project.dist}"/>
        <copy file="${env.JAVA_HOME}/jre/lib/rt.jar" tofile="${project.dist}/rt_debug.jar"/>
        <jar jarfile="${project.dist}/rt_debug.jar" update="true" compress="false">
            <fileset dir="${project.classes}"/>
        </jar>
    </target>
 
</project>

这里要求已经设置好JAVA_HOME(即安装的jdk的根目录,如果jdk安装在d:\java,那么JAVA_HOME就设置为d:\java)。把build.xml文件放在比如d:\build里面,将JAVA_HOME/jre/lib/rt.jar文件也拷到d:\build里,并且解压到一个叫rt目录里面,在命令行里面输入如下命令,然后运行:


当运行结束后,在d:\bulid目录里面会增加另一个build个目录,一个log.txt文件。log.txt是打印的日志文件,里面存储了编译jdk的一些信息,可能有很多警告,但是只要没有编译错误,可以不用理会。而build目录里面还有3个目录,分别是src目录,存储解压于JAVA_HOME/src.zip的java源码,classes目录存放重新编译之后的class文件,dist目录,存放将重新编译后的class打包的rt_debug.jar文件。这个rt_debug.jar文件,就是加入了调试信息后的jar文件。

下面在eclipse里面引入这个jar文件,假定将刚才的rt_debug.jar文件拷贝到d:\rt_debug下面,打开eclipse,然后选择Window->Preferences->Java->Installed JRES,出现如下界面:

http://images.cnitblog.com/blog/489427/201311/10193517-d7ff36e60a5c4dbabbf8dec0a96255dc.png

然后再界面右边Installed JREs列表里面选择一个jre,点击Edit按钮,如下图:


当点击Edit按钮之后,会出现如下界面:

在上面界面中点击Add External JARs...按钮,刚才生成的rt_debug.jar,并且一定要注意,保证rt_debug.jar在原始的rt.jar的前面(在加入rt_debug.jar后,选择rt_debug.jar,通过上面界面右边的Up按钮移动即可)。最终的结果如下图:


点击Finish按钮,完成之后,新建一个工程,试着调试进入jdk源码,将鼠标放在源码里面的局部变量里面,看是否可以看见局部变量的值。


转自:http://www.cnblogs.com/chaoguo1234/p/3416987.html#undefined








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值