日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ant语法和规范

發(fā)布時(shí)間:2024/7/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ant语法和规范 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、前言:

?

? ? ? ?以前在做JavaEE項(xiàng)目的時(shí)候曾經(jīng)聽說(shuō)過(guò)這個(gè)名字,但是由于沒有用到,所以也沒有去學(xué)習(xí)。最近在研究Android打包的時(shí)候,看了下build.xml文件,甚是迷糊,于是學(xué)習(xí)一下,稍有心得。

?

二、什么是ant?

? ? ? ? ant是一種基于Java的打包工具,非常類似于Linux下的makefile。ant有自己的語(yǔ)法和規(guī)范,通常用xml來(lái)承載。ant可以集成代碼生成、編譯、打包等功能(需要說(shuō)明一下,ant本身并不具備這些功能,只是調(diào)用者),使用ant能做到編譯、打包一系列流程的自動(dòng)化,就像生產(chǎn)流水線,一條指令,全程自動(dòng)生產(chǎn)。

ant工具是使用Java語(yǔ)言編寫的,所以依賴jdk,安裝ant必須先安裝好jdk。同樣ant很多擴(kuò)展的自定義的功能同樣可以使用Java編寫,后續(xù)會(huì)詳細(xì)介紹。

?

三、ant的基本語(yǔ)法和規(guī)范

? ? ? ? ? ??ant的構(gòu)建腳本是使用xml文件承載的,缺省命名為build.xml。進(jìn)入其文件所在目錄,可以在cmd中直接使用ant命令調(diào)用(前提是先配好bin目錄的環(huán)境變量)。

? ? ? ?我們先來(lái)看一下build.xml文件的基本結(jié)構(gòu):

?

[html]?view plaincopy
  • <?xml?version="1.0"?encoding="UTF-8"?>??
  • <project?name="test"?default="build">??
  • ??????<property?name="file.dir"?value="D://"/>??
  • ????????<property?file="local.properties"?/>??
  • ????????<loadproperties?srcFile="project.properties"?/>??
  • ????????<import?file="rules.xml"?optional="true"?/>??
  • ????????<target?name="build">??
  • ?????????????<echo>runing...</echo>??
  • ????????</target>??
  • ???????<target?name="debug"?depends="build">??
  • ?????????????<echo?level="info">${file.dir}?debugging...</echo>??
  • ???????</target>??
  • </project>??
  • ?

    ?

    project ? ?根標(biāo)簽。name屬性表示項(xiàng)目名稱,沒什么作用;default屬性表示默認(rèn)執(zhí)行命令,cmd命令行中使用ant和ant ?default屬性值(本例是ant build) 兩種方式等效。

    ?

    property ?定義類標(biāo)簽。可以定義一些常量值,需要注意:定義后理論不能再修改(其實(shí)可以通過(guò)第三方庫(kù)修改)。比如第3行定義了一個(gè)file.dir的變量,值為”D://“,引用時(shí)使用 ${file.dir}調(diào)用。第4行,是引入一個(gè)properties文件(里面定義了很多property),相當(dāng)于導(dǎo)包。

    ?

    loadproperties ?引用標(biāo)簽。功能和第4行<property file=""/>等同,表示引入一個(gè)properties定義集群。好處是便于封裝和管理。

    ?

    import ?引入標(biāo)簽。和loadproperties不同的是,import是引入另一個(gè)構(gòu)建文件,包括變量和執(zhí)行命令。

    ?

    target ?執(zhí)行標(biāo)簽。可以在cmd命令行中直接ant + target執(zhí)行,比如以上腳本可以執(zhí)行: ant build 和 ant debug。target標(biāo)簽中有個(gè)depends屬性,表示執(zhí)行命令依賴。如果要執(zhí)行debug命令,會(huì)自動(dòng)先執(zhí)行depends里面的命令。以上腳本執(zhí)行 ant debug,實(shí)際是執(zhí)行了 ant build 和 ant debug

    ?

    echo ?日志標(biāo)簽。表示日志輸出,能在cmd命令中打印顯示,level屬性表示:日志級(jí)別。 比較特殊的是echo中可以引用變量,用法同變量調(diào)用方式${name}。

    ?

    ?

    以上就是ant最基本的語(yǔ)法規(guī)范,我們執(zhí)行下ant debug命令看看結(jié)果。

    ?

    ?

    分析以上執(zhí)行過(guò)程:cmd進(jìn)入build.xml所在目錄,執(zhí)行target名為debug的命令,由于debug依賴于build,所以先執(zhí)行build命令,打印出runing... 然后再執(zhí)行debug命令下的語(yǔ)句,打印出D:// debugging... (注意其中引用了一個(gè)變量),執(zhí)行完畢!

    ?

    ?

    四、ant的常用語(yǔ)法

    ?

    ? ? ? ??1、文件語(yǔ)句

    ? ? ? ??文件操作是ant中最常用的基本操作,包括創(chuàng)建、復(fù)制、刪除、遍歷等。由于ant涉及最多的就是文件操作,所以它的api相對(duì)來(lái)說(shuō)非常豐富,讓我們來(lái)逐一介紹和學(xué)習(xí)。

    ? ? ? ? 創(chuàng)建:mkdir標(biāo)簽。 傳入一個(gè)文件路徑,直接創(chuàng)建出一個(gè)文件目錄。然而不知為何ant沒有提供創(chuàng)建文件的功能。

    [html]?view plaincopy
  • <mkdir?dir="D:/test"/><span?style="font-family:?Arial,?Helvetica,?sans-serif;?background-color:?rgb(255,?255,?255);">??????</span>??
  • ? ? ? ? 刪除:delete標(biāo)簽。刪除文件或文件夾。

    ?

    [html]?view plaincopy
  • <delete?file="D:/test/example.txt"/>??
  • <delete?dir="D:/test"/>??
  • ?

    ? ? ? ? ? ? ?移動(dòng):move標(biāo)簽。包括文件重命名、文件移動(dòng)、文件目錄移動(dòng)。

    ?

    ?

    [html]?view plaincopy
  • <!--?重命名?-->??
  • <move?file="D:/test/example1.txt"?tofile="D:/test/example2.txt"/>??
  • <!--?移動(dòng)文件至新目錄,新目錄會(huì)自動(dòng)創(chuàng)建?-->??
  • <move?file="D:/test/example2.txt"?todir="D:/test2"/>??
  • <!--?文件夾移動(dòng)?-->??
  • <move?dir="D:/test/example2.txt"?todir="D:/test2"/>??

  • ? ? ? ? ? ? ?復(fù)制:copy標(biāo)簽。文件復(fù)制。

    ?

    ?

    [html]?view plaincopy
  • <!--?文件復(fù)制,指定新文件名?-->??
  • <copy?file="D:/test/example.txt"?tofile="D:/test/example2.txt"/>??
  • <!--?文件復(fù)制,指定新文件目錄?-->??
  • <copy?file="D:/test/example.txt"?todir="D:/test/new/"/>??
  • <!--?文件夾復(fù)制,指定新文件夾?-->??
  • <copy?dir="D:/test/"?todir="D:/test/new/"/>??
  • ?

    ?

    ? ? ? ??2、條件語(yǔ)句

    ? ? ? ? ? ???condition標(biāo)簽,配合istrue或者isfalse使用。

    ?

    [html]?view plaincopy
  • <condition?property="check">??
  • ????<istrue?value="false"?/>??
  • </condition>??
  • <target?name="build"?if="check">??
  • ????<echo>build?running...</echo>??
  • </target>??

  • ? ? ? ??稍微解釋下以上語(yǔ)句:在執(zhí)行名為build的target任務(wù)時(shí),由于target中含有if的標(biāo)簽,所以需要判斷名為check的條件語(yǔ)句的值,但是istrue=false的語(yǔ)句表示條件不符合,echo并不會(huì)執(zhí)行。如果改成istrue=true,echo將執(zhí)行。當(dāng)然以上語(yǔ)句等價(jià)于:

    [html]?view plaincopy
  • <condition?property="check">??
  • ????<isfalse?value="true"?/>??
  • </condition>??
  • <target?name="build"?if="check">??
  • ????<echo>build?running...</echo>??
  • </target>??
  • ? ? ? ? ? ? ? ? ?需要注意下,istrue和isfalse兩種標(biāo)簽不能同時(shí)存在。

    ?

    ? ? ? ? ? 除了直接使用istrue指定條件語(yǔ)句的值,還能動(dòng)態(tài)地使用equals比較變量,比如:

    ?

    [html]?view plaincopy
  • <property?name="id"?value="99"></property>??
  • ????<condition?property="check">??
  • ????????<equals?arg1="${id}"?arg2="100"/>??
  • ????</condition>??
  • ????<target?name="build"?if="check">??
  • ????????<echo>build?running...</echo>??
  • ????</target>??

  • ? ? ? ??3、循環(huán)語(yǔ)句
    ? ? ? ? ant本身并沒有提供循環(huán)語(yǔ)句,但是我們可以借助于ant-contrib.jar使用循環(huán)語(yǔ)句,舉個(gè)簡(jiǎn)單的例子:

    ?

    ?

    [html]?view plaincopy
  • ???<property?name="ant-contrib"?value="E:\\Android\\android-sdk\\tools\\lib\\ant-contrib-1.0b3.jar"></property>??
  • ???<taskdef?name="foreach"?classname="net.sf.antcontrib.logic.ForEach"?classpath="${ant-contrib}"/>??
  • <target?name="build">??
  • ????<foreach?list="1,2,3,4,5,6,7,8,9"?param="number"?delimiter=","?target="log"/>????
  • </target>??
  • <target?name="log">??
  • ????<echo>foreach?running:?${number}</echo>??
  • </target>??
  • ? ? ? ?以上語(yǔ)句稍微有些復(fù)雜,我們一句句來(lái)理。第一句property定義一個(gè)變量,即擴(kuò)展jar包ant-contrib-1.0b3.jar所在的文件位置。第二句taskdef標(biāo)簽,表示定義自定義名為foreach的標(biāo)簽,需要引用類名和類路徑,這是使用foreach的前提條件,必須先定義好。然后我們就可以在target任務(wù)中愉快地使用for循環(huán)了。
    ? ? ? ?接下來(lái)我們來(lái)看foreach語(yǔ)句的內(nèi)容,list標(biāo)簽 + delimiter標(biāo)簽構(gòu)成循環(huán)的條件,這里是循環(huán)9次,每次循環(huán)創(chuàng)建一個(gè)名為number的數(shù)字變量,同時(shí)執(zhí)行l(wèi)og任務(wù)打印一句話,結(jié)果如下:

    ?



    ? ? ? ??4、自定義語(yǔ)句

    ??? ? ? ant的魅力所在之處就是強(qiáng)大的自定義語(yǔ)句,比如上面的foreach語(yǔ)句。ant官方庫(kù)只定義了一些簡(jiǎn)單的語(yǔ)句,但是在實(shí)際項(xiàng)目中遠(yuǎn)遠(yuǎn)不足以滿足我們的需要,比如新建一個(gè)文件。這里我們就用自定義語(yǔ)句來(lái)實(shí)現(xiàn)下。

    ? ? ? ? ant的原理是每個(gè)語(yǔ)句標(biāo)簽映射一個(gè)java類文件,每個(gè)標(biāo)簽里的屬性則映射java類的變量,有點(diǎn)類似spring中xml映射javabean。每個(gè)ant標(biāo)簽映射的java類文件不是隨意編寫的,有一定的規(guī)范。

    ? ? ? ? 在ant安裝目錄下的lib文件目錄中有個(gè)名為ant.jar的包,這個(gè)就是ant的規(guī)范標(biāo)準(zhǔn)庫(kù),自定義語(yǔ)句Java類都需要依賴它來(lái)編譯,同時(shí)每個(gè)語(yǔ)句必須繼承其中名為Task.java的基類,復(fù)寫execute方法執(zhí)行自定義操作。

    ?

    [java]?view plaincopy
  • package?com.ant.test;??
  • ??
  • import?java.io.File;??
  • import?java.io.IOException;??
  • ??
  • import?org.apache.tools.ant.BuildException;??
  • import?org.apache.tools.ant.Task;??
  • ??
  • public?class?FileCreater?extends?Task{??
  • ??
  • ????private?String?fileName;??
  • ??????
  • ????public?void?setName(String?fileName){??
  • ????????this.fileName?=?fileName;??
  • ????}??
  • ??????
  • ????@Override??
  • ????public?void?execute()?throws?BuildException?{??
  • ????????try?{??
  • ????????????new?File(fileName).createNewFile();??
  • ????????}?catch?(IOException?e)?{??
  • ????????????log("create?file?'"?+?fileName?+?"'?failed!");??
  • ????????}??
  • ????????log("create?file?'"?+?fileName?+?"'?successful!");??
  • ????????super.execute();??
  • ????}??
  • }??
  • ? ? ? ? ?上面定義了創(chuàng)建文件的自定位標(biāo)簽,把這個(gè)java文件打成jar包,然后就可以在build.xml使用了,xml內(nèi)容如下:

    ?

    ?

    [html]?view plaincopy
  • ???<property?name="fileJar"?value="D:/file.jar"></property>??
  • ???<taskdef?name="filecreater"?classname="com.ant.test.FileCreater"?classpath="${fileJar}"/>??
  • <target?name="build">??
  • ????<filecreater?name="D:/test.txt"/>????
  • </target>??
  • ? ? ? ? ?以上執(zhí)行的操作是創(chuàng)建一個(gè)路徑為D:/test.txt的文件。filecreater是映射FileCreater.java的自定義標(biāo)簽,name屬性傳入文件路徑名,會(huì)自動(dòng) 反射調(diào)用FileCreater.java中的setName方法注入?yún)?shù)值。在FileCreater.java中有個(gè)log打印輸出方法,可以在cmd中輸出,極大方便我們的調(diào)試。執(zhí)行結(jié)果如下:

    ?


    ------------------------------------------------------------------------------------------------>

    好了,ant相關(guān)的就先寫到這里,權(quán)當(dāng)拋磚引玉^-^

    ?

    http://blog.csdn.net/MegatronKings/article/details/48012125

    轉(zhuǎn)載于:https://www.cnblogs.com/luolizhi/p/5514170.html

    總結(jié)

    以上是生活随笔為你收集整理的ant语法和规范的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 免费的毛片视频 | 国产娇小hdxxxx乱 | 国产精品一区二区三区免费在线观看 | 久久电影一区 | 国产精品久久久久9999爆乳 | 亚洲一区二区日本 | 日韩综合区 | 人妻少妇精品视频一区二区三区 | 18视频在线观看男男 | 一区不卡在线 | 欧美午夜精品久久久久免费视 | 99精品视频在线观看免费 | 精品日韩一区二区三区四区 | 爱爱视频在线播放 | 兔费看少妇性l交大片免费 日韩高清不卡 | 久久综合五月婷婷 | 日韩欧美一级二级 | 免费一区二区三区 | 天海翼av | 午夜精品视频一区二区三区在线看 | 青青草原一区二区 | 中文字幕一区二区三区人妻四季 | 性生交大片免费看女人按摩 | 色涩av| 成人精品一区二区三区中文字幕 | 欧美v在线 | 91精品国产综合久久久久久 | 中文字幕在线播放一区二区 | 国产精品不卡在线观看 | 69久久久久 | 中国黄色录像一级片 | 西西人体大胆4444ww张筱雨 | 很黄的性视频 | 国产在线视频资源 | 古装三级吃奶做爰 | 高清在线一区二区三区 | 久久久精品小视频 | 国产熟妇一区二区三区aⅴ网站 | 美女被啪羞羞粉色视频 | 91亚洲国产成人精品一区二区三 | 久久久久99精品成人片我成大片 | 欧美性猛交xxxx乱大交蜜桃 | 国产成人午夜 | www射| 妺妺窝人体色www聚色窝仙踪 | 欧美黑人性生活 | 熟睡侵犯の奶水授乳在线 | 中文字幕国产精品 | 久草美女 | 天堂网男人| 成人网色 | 伊人热久久 | 日韩精品免费 | 人妻 日韩 欧美 综合 制服 | www视频在线免费观看 | 激情久久av一区av二区av三区 | 中文字幕有码无码人妻av蜜桃 | 国产99视频在线观看 | 九九热精品 | 日韩精品在线第一页 | 日本乱偷人妻中文字幕在线 | 国产亚洲二区 | 女~淫辱の触手3d动漫 | 伊在线久久丫 | 在线视频亚洲色图 | av黄色片 | 野外一级片 | 又色又爽又高潮免费视频国产 | 亚洲爱av| 久久精品爱 | 久久综合久久网 | 水密桃av| 法国空姐在线观看视频 | 日韩av综合 | 黄色片欧美 | 黄色一级国产 | 国产性猛交普通话对白 | 男人桶进美女尿囗 | 青青在线精品 | 97福利社 | 在线观视频免费观看 | 成人毛片100免费观看 | 黑人操日本 | 久久综合免费 | 蜜桃综合| 久久国产电影 | 精品免费视频一区二区 | 波多野结衣精品视频 | 菲律宾黄色片 | 免费av在线网站 | 成人性生活免费视频 | 日韩一区二区三区三四区视频在线观看 | 欧美一区二区三区爽爽爽 | 日韩 欧美 综合 | 欧美日韩中文国产一区发布 | 亚洲精品国产视频 | 一本色道久久综合亚洲精品按摩 | 五月婷婷六月激情 | 欧美激情成人 |