为Ant开发扩展任务

本文详细介绍了如何在Ant中创建并调试自定义任务,包括继承Task类、实现set方法及execute方法等步骤。同时提供了两种定义自定义任务的方法,一种是在build.xml中直接使用<taskdef>标签定义,另一种则是将<taskdef>标签置于build文件之外。
原文:[url]http://lujar.iteye.com/blog/154490[/url]
关于Ant的调试:
如何在eclipse中调试自定义的ant task [url]http://blog.youkuaiyun.com/onlyerlee/article/details/2260063[/url]
创建并调试自定义的Ant Task:[url]http://blog.youkuaiyun.com/caesarzou/article/details/5672415[/url]
[b]第二篇调试文章,会说出第一篇文章的不足,并提供更好的方式。[/b]

[color=red][b]ant学习笔记—自定义Ant任务[/b][/color]:[url]http://blog.youkuaiyun.com/jackkp_catus/article/details/2295612[/url]


[b]两种方式[/b]

为Ant实现扩展任务其实是非常容易的,只需按照以下几个步骤即可:

1. 创建一个Java类继承org.apache.tools.ant.Task类;

2. 对每个属性实现set方法。Ant会根据需要自动完成类型转换;

3. 如果扩展的任务需要嵌套其它的Task,那么这个Java类必需实现接口org.apache.tools.ant.TaskContainer;

4. 如果扩展的任务要支持Text,需要增加一个方法void addText(String);

5. 对每个嵌套的元素,实现create、add 或 addConfigured 方法;

6. 实现public void execute方法;

7. 在build.xml文件中使用 <taskdef> 来引用自定义的Task。

下面以一个简单的例子来说明如何为Ant增加一个hello任务,它可以连续打印多条信息,打印的次数由属性count指定,而打印的内容则由它内嵌的一个helloinfo任务的message属性指定,看上去这非常类似JSP中自定义标签的一些概念,实现代码如下:

//HelloInfoTask.java
package com.sharetop.antdemo;

import org.apache.tools.ant.*;

public class HelloInfoTask {
private String msg;

public void execute() throws BuildException {
System.out.println(msg);
}

public void setMessage(String msg) {
this.msg = msg;
}
}



下面是外部Task类的代码:

//HelloTask.java
package com.sharetop.antdemo;

import org.apache.tools.ant.*;

public class HelloTask extends Task implements org.apache.tools.ant.TaskContainer {
private Task info;
private int count;

public void execute() throws BuildException {
for (int i = 0; i < count; i++)
info.execute();
}

public void setCount(int c) {
this.count = c;
}

public void addTask(Task t) {
this.info = t;
}
}



实现了这两个Task,在build.xml文件中定义它的task name,就可以在Target中执行它了。如果你不想使用 <taskdef> 标签来定义Task,也可以通过修改default.properties文件来实现引入新Task,这个文件位于org.apache.tools.ant.taskdefs 包里。下例是一个使用 标签来引入新Task的Build文件部分:
[color=red]第一种方式:[/color]
<target name="hello" depends="client">
<taskdef name="hello" classname="com.sharetop.antdemo.HelloTask" classpath="client.jar" />
<taskdef name="helloinfo" classname="com.sharetop.antdemo.HelloInfoTask" classpath="client.jar" />
<hello count="3">
<helloinfo message="hello world" />
</hello>
</target>



[color=red]另一种方式:[/color][url]http://blog.youkuaiyun.com/wangjun_pfc/article/details/4425495[/url]
[b][color=blue]不同的是把taskdef定义在target的外部[/color][/b]

<path id="xdoclet.task.classpath">
<fileset dir="${xdoclet.home}/lib">
<include name="**/*.jar"/>
</fileset>
<fileset dir="${xdoclet.home}/plugins">
<include name="**/*.jar"/>
</fileset>
</path>
<taskdef
name="xdoclet"
classname="org.xdoclet.ant.XDocletTask"
classpathref="xdoclet.task.classpath"
/>



定义完任务之后,就可以来使用它了,如:

<target name="生成Hibernate配置文件">
<xdoclet>
<fileset dir="${src.dir}/com/bjsxt/oa/model">
<include name="**/*.java"/>
</fileset>
<component
classname="org.xdoclet.plugin.hibernate.HibernateConfigPlugin"
destdir="${src.dir}"
version="3.0"
hbm2ddlauto="update"
jdbcurl="jdbc:mysql://127.0.0.1/oa_200706"
jdbcdriver="com.mysql.jdbc.Driver"
jdbcusername="root"
jdbcpassword="mysql"
dialect="org.hibernate.dialect.MySQLDialect"
showsql="true"
/>
</xdoclet>
</target>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值