﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-听风观影，我的博客！-文章分类-ant</title><link>http://www.blogjava.net/chinarefers/category/8301.html</link><description>我的博客日志！！！</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 09:37:50 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 09:37:50 GMT</pubDate><ttl>60</ttl><item><title>转:交互式的ant 调用与自写的Ant Task</title><link>http://www.blogjava.net/chinarefers/articles/34559.html</link><dc:creator>听风观影</dc:creator><author>听风观影</author><pubDate>Thu, 09 Mar 2006 14:33:00 GMT</pubDate><guid>http://www.blogjava.net/chinarefers/articles/34559.html</guid><wfw:comment>http://www.blogjava.net/chinarefers/comments/34559.html</wfw:comment><comments>http://www.blogjava.net/chinarefers/articles/34559.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chinarefers/comments/commentRss/34559.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinarefers/services/trackbacks/34559.html</trackback:ping><description><![CDATA[写完代码生成的框架，少不了需要ant来调用。写完之后值得一记的东西有三：<BR>一、《Ant--The Definitive Guide 2nd》是本不错的cookbook<BR><BR>二、与用户进行交互式输入而不是逼着用户改build.xml<BR><BR>下面的代码运行时，ant会提问"What is the name of your POJO?"，让用户输入属性PojoName的值。<BR><BR>&lt;input message="What is the name of your POJO (i.e. Person)?" addproperty="PojoName"/&gt;<BR>三，写Ant Task<BR><BR>写Ant Task其实很简单，看看下面这篇Turtorial就可以了。<BR><BR><A href="http://ant.apache.org/manual/tutorial-writing-tasks.html" target=_blank><FONT color=#000000>http://ant.apache.org/manual/tutorial-writing-tasks.html</FONT></A><BR><BR>上文可浓缩到三句话里：<BR>1.写一个Java类，继承于org.apache.tools.ant.Task。<BR>2.实现execute()方法，Ant就会进行调用。<BR>3.参数要从build.xml传入时，Task类只需拥有同名的变量和setter函数，Ant就会为你注入。<BR><BR>1.Ant Task的标准实现<BR><BR>import org.apache.tools.ant.Task;public class HelloWorld extends Task{String msg;public void execute(){&nbsp;&nbsp;System.out.println(msg);}public void setMsg(String msg){&nbsp; &nbsp; this.msg = msg;}}<BR>将上面的文件编译打包成helloworld.jar<BR><BR>build.xml调用如下<BR><BR>&lt;target description="Use the Task"&gt;&nbsp;&nbsp;<BR>&lt;taskdef name="helloworld" classname="HelloWorld" classpath="helloworld.jar"/&gt;&nbsp;&nbsp;<BR>&lt;helloworld msg="Hello World"/&gt;<BR>&lt;/target&gt;<BR><BR>另外： <BR>1.取得build.xml中的公共变量和Target名称 <BR><BR>String myProperty = getProject().getProperty("myProperty ");<BR>String targetName = getOwningTarget().getName();&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <BR>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<BR>2.取得复合的属性就要复杂一点，该模式可以扩展到比下面复杂得多的情况。<BR>&lt;target&gt;&nbsp;&nbsp;<BR>&lt;helloworld&gt;&nbsp; &nbsp;&nbsp;&nbsp;<BR>&lt;message msg="Hello "/&gt;&nbsp; &nbsp;&nbsp;&nbsp;<BR>&lt;message msg="World"/&gt;&nbsp;&nbsp;<BR>&lt;/helloworld&gt;<BR>&lt;/target&gt;<BR><BR>1.先定义叫Message的内部类以表示Message节点，该类有一个msg属性，同样有一个setter函数，使其可以在build.xml中赋值<BR><BR>public class Message extends Object{&nbsp; &nbsp;<BR>public Message()&nbsp;&nbsp;{}&nbsp;&nbsp;<BR>String msg;&nbsp;&nbsp;<BR>public void setMsg(String msg)&nbsp;&nbsp;{&nbsp; &nbsp; <BR>this.msg = msg;&nbsp;&nbsp;<BR>}&nbsp;&nbsp;<BR>public String getMsg() {&nbsp; &nbsp; return msg;&nbsp;&nbsp;}<BR>}<BR><BR>2.再根据Ant的框架，定义给Helloworld注入message的createXXX函数和持有Message列表的messages对象，ant就会为你完成自动注入。<BR><BR>Vector msgs = new Vector(); <BR>public Message createMessage(){&nbsp; &nbsp;<BR>Message msg = new Message(); <BR>messages.add(msg);&nbsp;&nbsp;<BR>return msg;<BR>}<BR><img src ="http://www.blogjava.net/chinarefers/aggbug/34559.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chinarefers/" target="_blank">听风观影</a> 2006-03-09 22:33 <a href="http://www.blogjava.net/chinarefers/articles/34559.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>