fileset用來(lái)定義目錄位置及操作適用于該目錄下的那些子目錄或文件
1. 拷貝單個(gè)文件到指定目錄下。
例:<copy todir="${basedir}/new" file="${basedir}/old/old1.txt1"> 將${basedir}/old/old.txt文件拷貝到${basedir}/new下 2. 拷貝一批文件到指定目錄下,例:<copy todir="${basedir}/new"> <fileset dir="${basedir}/old"> <include name="old1.txt" /> <include name="old2.txt" /> <exclude name="old8.txt" /> </fileset> </copy> 這里fileset定義的是原文件的組成形式,<include/>子屬性表示包括,<exclude/>子屬性表示排除,很簡(jiǎn)單,通過(guò)他們組合實(shí)現(xiàn)多文件的篩選,當(dāng)然我這個(gè)例子用得很傻。比如 <include name="appgen/**"/> <include name="ibatis/**"/> <exclude name="**/*.log"/> 拷貝appget目錄和ibatis目錄下除了.log文件以外的其它所有文件和子目錄。 可以把<fileset/>簡(jiǎn)寫成<fileset dir="${basedir}/old" includes="old1.txt,old2.txt" />,includes可以理解成include的復(fù)數(shù)形式,包含多個(gè)文件時(shí)用逗號(hào)隔開(kāi),excludes也一樣。 3. 拷貝一個(gè)目錄到指定目錄下 例:<copy todir="${basedir}/new"> <fileset dir="${basedir}/old"> <include name="appgen" /> <include name="appgen/" /> <include name=appgen/**" /> <include name="appgen/***" /> </fileset> </copy> 同樣使用<fileset/>屬性,name指定目錄名,不過(guò)這里要分兩種情況,用<include/>子屬性和不用<include/>子屬性. 若使用<include/>, 又要分三種情況 若是“appgen”,則只會(huì)拷貝名為appgen的空目錄過(guò)去,它里面的文件和子目錄則不會(huì)拷貝。 若是“appgen/”,或“appgen/**”,則會(huì)把整個(gè)appgen目錄拷貝過(guò)去,包括里面的文件和子目錄。 若是“appgen/*”,則只會(huì)把該目錄和該目錄下第一級(jí)子目錄的所有東西拷貝過(guò)去,而不會(huì)拷貝第二級(jí)和第二級(jí)以下的。注:“appgen/*”這兒是一個(gè)*號(hào),*號(hào)若大于兩個(gè),也跟一個(gè)*號(hào)是同樣效果。比如“appgen/*”和“appgen/****”都只拷貝appgen目錄下第一級(jí)子目錄。 注:若appeng這個(gè)目錄本身就是個(gè)空目錄(就是不存在),無(wú)論怎么寫,這個(gè)空目錄都不會(huì)被拷貝。也就是說(shuō),copy操作不會(huì)產(chǎn)生創(chuàng)建空目錄的作用,要想創(chuàng)建空目錄,只有用mkdir。 若不使用任何<include>屬性,如 <fileset dir="${basedir}/old"> </fileset> 則會(huì)拷貝${basedir}/old下的所有文件和子目錄。 注:使用<exclude/>排除目錄時(shí),目錄名必須寫成“appgen/”或“appgen/**”形式,否則不會(huì)生效。 以上是三種拷貝到目錄的種類,注意如果計(jì)算機(jī)中沒(méi)有todir指定的路徑,ant將會(huì)自動(dòng)創(chuàng)建這個(gè)路徑。 4. 拷貝單個(gè)的文件: 〈copy tofile="old.txt" file="new.txt" /〉就這么簡(jiǎn)單就行了。 當(dāng)然也可以寫成 <copy tofile="${basedir}/new/new.txt"> <fileset dir="${basedir}/old" includes="old.txt" /> </copy> 這里includes就只能寫一個(gè)文件,不能寫上多個(gè)文件,因?yàn)椴荒軐⒍鄠€(gè)文件復(fù)制到一個(gè)文件中去,所以這樣麻煩的寫法是沒(méi)有意義的。?這個(gè)地方還有待去驗(yàn)證一下. 復(fù)制肯定還要涉及到同名覆蓋的問(wèn)題,ant在copy類的API中說(shuō)明:Files are only copied if the source file is newer than the destination file,這里的newer是指文件的修改時(shí)間,即使你在修改時(shí)文件內(nèi)容沒(méi)有任何變化,只是導(dǎo)致修改時(shí)間變了,ant同樣會(huì)覆蓋同名文件,也就是說(shuō),ant不會(huì)檢查文件內(nèi)容。 對(duì)于是復(fù)制目錄的情況,由于目錄沒(méi)有修改時(shí)間,ant還是通過(guò)檢查目錄內(nèi)文件的修改時(shí)間來(lái)決定是否覆蓋的,若目錄內(nèi)某文件修改時(shí)間有變化,則會(huì)覆蓋這個(gè)文件,而不是整個(gè)目錄。 如果要強(qiáng)行覆蓋,<copy/>有個(gè)overwrite屬性,默認(rèn)為false,改成true就行了。 Ant真是太方便了,以前都沒(méi)注意到它。功能很強(qiáng)大,能創(chuàng)建數(shù)據(jù)庫(kù),配置服務(wù)器,部署發(fā)布應(yīng)用……只需要寫好build.xml文件,剩下的就交給ant來(lái)“安裝”你的WEB應(yīng)用了。
以上就這些:
您也可以去apache ant項(xiàng)目里去看一下 fileset的用法:
|
|