寫完代碼生成的框架,少不了需要ant來調用。寫完之后值得一記的東西有三:
一、《Ant--The Definitive Guide 2nd》是本不錯的cookbook
二、與用戶進行交互式輸入而不是逼著用戶改build.xml
下面的代碼運行時,ant會提問"What is the name of your POJO?",讓用戶輸入屬性PojoName的值。
<input message="What is the name of your POJO (i.e. Person)?" addproperty="PojoName"/>
三,寫Ant Task
寫Ant Task其實很簡單,看看下面這篇Turtorial就可以了。
http://ant.apache.org/manual/tutorial-writing-tasks.html上文可濃縮到三句話里:
1.寫一個Java類,繼承于org.apache.tools.ant.Task。
2.實現execute()方法,Ant就會進行調用。
3.參數要從build.xml傳入時,Task類只需擁有同名的變量和setter函數,Ant就會為你注入。
1.Ant Task的標準實現
import org.apache.tools.ant.Task;public class HelloWorld extends Task{String msg;public void execute(){ System.out.println(msg);}public void setMsg(String msg){ this.msg = msg;}}
將上面的文件編譯打包成helloworld.jar
build.xml調用如下
<target description="Use the Task">
<taskdef name="helloworld" classname="HelloWorld" classpath="helloworld.jar"/>
<helloworld msg="Hello World"/>
</target>
另外:
1.取得build.xml中的公共變量和Target名稱
String myProperty = getProject().getProperty("myProperty ");
String targetName = getOwningTarget().getName();
2.取得復合的屬性就要復雜一點,該模式可以擴展到比下面復雜得多的情況。
<target>
<helloworld>
<message msg="Hello "/>
<message msg="World"/>
</helloworld>
</target>
1.先定義叫Message的內部類以表示Message節點,該類有一個msg屬性,同樣有一個setter函數,使其可以在build.xml中賦值
public class Message extends Object{
public Message() {}
String msg;
public void setMsg(String msg) {
this.msg = msg;
}
public String getMsg() { return msg; }
}
2.再根據Ant的框架,定義給Helloworld注入message的createXXX函數和持有Message列表的messages對象,ant就會為你完成自動注入。
Vector msgs = new Vector();
public Message createMessage(){
Message msg = new Message();
messages.add(msg);
return msg;
}