自定义的ant Task如果比较复杂,如何使用ant运行的build.xml调试对应的java代码?
思路一,ant本身是个批处理,逻辑也是用java实现的,自定义的类Task是以refect的方式由java虚拟机加载执行的。我们用的命令 ant -f xxx.xml target实际是调用了一个脚本,并把build文件和target作为参数传给ant的主函数。因此完全可以在eclipse中完成这些动作,并启动调试或者单纯运行。
在一个拥有build.xml文件的java工程(既包含要调试的task的工程)中,针对工程debug-》debug configurations,工程选择当前工程,主函数org.apache.tools.ant.Main,也就是ant的主函数。
选择argument选项卡,在program argument中填写你本来想运行的ant参数比如: -f "D:\xxx\build.xml" debugtargetname;
在classpath中bootstrap entries中添加ANT_HOME\lib目录下的ant.jar和ant-launcher.jar。
在源代码中打上断点即可启动调试。
其他的配置没什么特殊的,将要调试的工程export出一个jar,比如test.jar,放置在和build.xml同目录下。具体的build.xml中
<target name="debugtarget">
<taskdef name="debugtest" classname="com.anttest.ForTestTask" classpath="./test.jar"/>
<debugtest/>
</target>
在com.anttest.ForTestTask的代码中的加断点即可。
这个方法要配置很多的环境信息和参数,且不利于多次调试,另外一种方法是利用java的远程调试来达到调试的目的。
参考这篇文字,http://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/
JPDA简介
Sun Microsystem 的 Java Platform Debugger Architecture (JPDA) 技术是一个多层架构,使您能够在各种环境中轻松调试 Java 应用程序。JPDA 由两个接口(分别是 JVM Tool Interface 和 JDI)、一个协议(Java Debug Wire Protocol)和两个用于合并它们的软件组件(后端和前端)组成。它的设计目的是让调试人员在任何环境中都可以进行调试。JPDA 不仅能够用于桌面系统,而且能够在嵌入式系统上很好地工作。
JVM Tool Interface (JVMTI) 规定必须为调试提供 VM(编辑注:从 Java V5 开始,将用 JVMTI 代替 Java V1.4 中的 JVMDI)。Java Debug Wire Protocol (JDWP) 描述调试信息的格式,以及在被调试的进程和调试器前端之间传输的请求,调试器前端实现 JDI,比如 Eclipse、Borland JBuilder 等。根据 Sun 的 JPDA 规范,被调试的程序常常称为 debuggee。JDI 是一个高级的接口,它定义用于远程调试的信息和请求。下面给出了调试器的架构。
java平台调试器架构
Components