国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
編寫(xiě)自定義任務(wù),輕松擴(kuò)展Ant (1)
 

編寫(xiě)自定義任務(wù),輕松擴(kuò)展Ant

 

Ant自帶了大量的任務(wù)(Task),在網(wǎng)上也有大量的任務(wù)可用,可是如果你面對(duì)的是別人根本不會(huì)想到的問(wèn)題,怎么辦呢?其實(shí),只要花一點(diǎn)點(diǎn)功夫就可以編寫(xiě)出自己的任務(wù)出來(lái)。我開(kāi)始也沒(méi)想到會(huì)這樣簡(jiǎn)單(做嵌套任務(wù)碰到一點(diǎn)問(wèn)題),由此可見(jiàn)Ant的結(jié)構(gòu)設(shè)計(jì)是相當(dāng)優(yōu)秀的。

 

假設(shè)我們需要顯示任務(wù)執(zhí)行各花了多少時(shí)間,寫(xiě)一個(gè)TimerTask

 

起步:覆蓋org.apache.tools.ant.Taskexecute方法

 

import org.apache.tools.ant.Task;

import org.apache.tools.ant.BuildException;

 

 

public class TimerTask extends Task {

public void execute() throws BuildException {

    System.out.println("I am a timer");

}

}

注意,編譯時(shí)ant.jar必須在Classpath上。

 

簡(jiǎn)單起見(jiàn),假設(shè)java源文件,類(lèi)文件在同一目錄下,

在此目錄再寫(xiě)一個(gè)
build.xml文件:

 

<?xml version="1.0" ?>

<project name="testTimer" default="test" basedir=".">

<taskdef name="timer" classname="TimerTask" classpath="."/>

 

<target name="test">

    <timer />

</target>

</project>

 

打開(kāi)Dos窗口,

   到此目錄,運(yùn)行ant

 

夠簡(jiǎn)單吧!如果類(lèi)路徑比這復(fù)雜或者在jar文件中,設(shè)置<taskdef>classpath屬性就行了。

 

繼續(xù):設(shè)置屬性

假設(shè)我們想添加一個(gè)action屬性,在Java文件中:

private String action;

….

public void execute() throws BuildException {

if (action.equals(“init”)) {

       

}

}

 

public String getAction() {

return action;

}

 

public void setAction(String string) {

action = string;

}

 

xml文件中:

<timer action=”init” />

 

使用Project保存中間結(jié)果

對(duì)于這個(gè)任務(wù)來(lái)講,必須把時(shí)間值保存起來(lái),比較合適的就是org.apache.tools.ant.Project了,Project對(duì)象生命期是整個(gè)Build

并且可以通過(guò)setProperty, getProperty等方法保存/獲取值。

 

public void execute() throws BuildException {

    if (getOwningTarget() == null)

        return;

    Project proj = getOwningTarget().getProject();

   

    // can do smt with proj now

}

 

晉級(jí):嵌套任務(wù)

如果我們想要在Timer下面再嵌套子任務(wù)(好像沒(méi)有這個(gè)必要 :-):

<timer action=”init” >

<foo />

</timer>

 

那我們首先只需要寫(xiě)一個(gè)簡(jiǎn)單的FooTask, 然后在build.xml加上<foo>的定義:

<taskdef name="timer" classname="TimerTask" classpath="."/>

<taskdef name="foo" classname="FooTask" classpath="."/> 

 

然后給TimerTask添加一個(gè)方法:

public void addFoo(FooTask foo) {

}

注意:addXXXXXX<taskdef>中的name決定,

Ant會(huì)利用Java Reflection去找;類(lèi)型必須是具體的類(lèi)型FooTask,不能是Task。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
taskdef 與 presetdef的區(qū)別
Timer schedule 方法
Android延時(shí)執(zhí)行的幾種方法
Android如何設(shè)置定時(shí)每十分鐘執(zhí)行一次任務(wù)
Java實(shí)現(xiàn)定時(shí)任務(wù)的三種方法
Java定時(shí)任務(wù)ScheduledThreadPoolExecutor
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服