快速业务通道

ant构建工具的类装载器问题 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
件,将最后名称为“run”的target(执行目标)修改成如下形式,即不设置其中的<classpath>子元素。

<target name="run" depends="compile"> <java classname="cn.itcast.MyClassLoader"> <!--classpath> <pathelement location="${classes.dir}"/> </classpath--> </java> </target>

再次执行ant,将报告如下错误信息:

Could not find cn.itcast.MainClass. Make sure you have it in your classpath at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:170)

在执行ant的命令行窗口中设置classpath环境变量:

set CLASSPATH=f:\project\classes;

再次执行ant,执行结果正常,如下:

java.net.URLClassLoader sun.misc.Launcher$AppClassLoader sun.misc.Launcher$ExtClassLoader cn.itcast.AuxiliaryClass

这个实验说明CLASSPATH环境变量对ant起了作用,并且在这种情况下,类的加载入器不再是 org.apache.tools.ant.loader.AntClassLoader2,而是java.net.URLClassLoader。

6.修改build.xml文件,让ant生成的AuxiliaryClass.class文件与MainClass文件位于不同的目录中,即结果目录如下:

f:\project |__src | |__cn | |__itcast | |__MainClass.java | |__AuxiliaryClass.java |__build.xml |__classes | |__cn | |__itcast | |__MainClass.class |__cn |__itcast |__AuxiliaryClass.class

ant构建工具的类装载器问题(3)

时间:2010-12-31

修改后的build.xml文件内容如下:

<project name="antloader" default="run"> <property name="classes.dir" value="classes" /> <property name="src.dir" value="src" /> <property name="mainclass" value="cn.itcast.MainClass" /> <target name="init"> <mkdir dir="${classes.dir}" /> </target> <target name="compile" depends="init"> <javac destdir="${classes.dir}" > <src path="${src.dir}" /> <include name="cn/itcast/MainClass.java" /> </javac> <delete file="${classes.dir}/cn/itcast/AuxiliaryClass.class" /> <javac destdir="." > <src path="${src.dir}" /> <include name="cn/itcast/AuxiliaryClass.java" /> </javac> </target> <target name="run" depends="clean,compile"> <java classname="${mainclass}"> <!--classpath> <pathelement location="${classes.dir}"/> </classpath--> <arg line="${arg0} ${arg1}" /> </java> </target> <target name="clean"> <delete dir="${classes.dir}" /> </target> </project>

因为第一个javac任务编译MainClass.java时,也会编译它引用的AuxiliaryClass.java文件,所以,增加了delete任务删除掉生成的AuxiliaryClass.class文件,然后再使用一个javac任务将AuxiliaryClass.java编译到另外一个目录中。java任务中也增加了一个<arg>子元素,用于为java虚拟机传递参数,在这一步暂时不需要这个元素,在下一步的实验中将使用这个元素。

再次执行ant,将报告如下错误信息:

Could not find cn.it

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号