Ant之Task

      每個Task都是一系列的可執行的代碼。

      一個Task可以包含大量的屬性,屬性值也可以引用Property,這些引用都會在執行之前由Ant完成解析。

   下面列出一些Ant自帶的一些常用的Task

一、Concat

    此任務是用來連接一個或多個資源到一個文件或者到控制檯輸出。如果目標文件不存在就會創建一個文件,除非資源列表時空的並且ignoreempty屬性的值爲true

    從Ant1.7.1開始,Concat任務就可以作爲一個Resource Collection來使用,他會返回一個精確的ResourceResource Collection是用於選擇哪一個資源被鏈接。沒有單一的屬性指定一個單一的資源。

  concat的參數有如下幾個:

(1)Desfile:目的文件用於鏈接流。如果不指定,將會使用控制檯來代替。

(2)Append:指定輸入到“desfile”指定的文件的內容是否拼接在原文件內容後面,默認爲no,如果改爲Yes,那麼源文Force:過時了,不說。

(3)Encoding:文本編碼格式。

(4)指定“desfile”所指定的文件不存且resource爲空的話該“desfile”文件是否可以被創建。

(5)Resourcename:指定導出的文件名。

  下面說說Concat其具體的使用方法:

  以下如無特殊說明,所有的文件操作均在F:\Ant目錄下進行。

(1)將文本寫入指定文件

<?xml version="1.0" encoding="UTF-8"?>
<project default="main" basedir="F:\" name="第一個Project">
	<property name="dist" value="." />
	<target name="main">
		<echo>主Target執行...</echo>
	</target>
	<!-- -->
	<target name="cmd_concat">
		<concat destfile="readme.txt" append="true">Hello,Ant World.
		</concat>
	</target>
</project> 
    執行之後就會在F盤下生成一個readme.txt文件,裏面的內容就是Hello、Ant World。

(2)將一系列的文本內容輸出到控制檯

<?xml version="1.0" encoding="UTF-8"?>
<project default="init" basedir="F:Ant">
	<target name="init">
		<echo>Main Target init...</echo>
	</target>
	<target name="cmd_filetoconsult">
		<concat>
			<!-- dir是指定目錄,includes相當於一個過濾器,兩個*之間是要過濾的目錄或文件的名字。如果過濾到就會輸出到控制檯,如 如果沒有匹配到就不會輸出到控制檯,*相當於SQL語句中的like字句,模糊匹配 
				dir="."表示在當前的根目錄,也就是在project中指定的basedir目錄,此處就是F盤的Ant目錄 -->
			<fileset dir="." includes="*concat*" />
		</concat>
	</target>
</project>
使用此語句會將制定的目錄也就是dir所指定的目錄中的所有文件的內容都輸出到控制檯(當然如果有includes匹配另外說了),如果目錄中還有目錄,Ant會自動去遍歷的。以上文件執行結果如下:



(3)將一個文件的內容寫入到另一個文件

	<target name="cmd_appendfile">
		<concat destfile="dext.txt" append="true">
			<filelist dir="concat" files="hello.txt" />
		</concat>
	</target>
    上面的Target的意思就是將F盤下的Ant/concat目錄下的hello.txt文件寫入到Ant目錄的dext.txt文件,如果dext.txt文件不存在就創建一個。

二、Condition

    condition任務用於在Ant運行時判斷並設置Property,即我們可以事先不用申明定義變量就在代碼中使用,到運行時再去判斷並定義!

  condition參數說明如下:

(1)property:屬性(property)的名字,這個是在Ant腳本中任務所引用的名稱。
(2)value:當條件成立的時候屬性的值。
(3)else:當條件不成立的時候屬性的值。
  condition使用方法如下:
<?xml version="1.0" encoding="UTF-8"?>
<project default="init" basedir="F:Ant">
	<target name="init">
		<echo>Main Target init...</echo>
	</target>

	<target name="cmd_condition">
		<condition property="p_name" value="concat" else="concat_a">
			<equals arg1="aa" arg2="aa">
			</equals>
		</condition>

		 <concat> <filelist dir="${p_name}" 
			files="hello.txt" /> </concat> 
	</target>
</project>
      當我們執行ant cmd_condition目標時,會首先執行condition任務,他會判斷equals的arg1參數和arg2參數兩個值是否相等,如果相等那麼就生成一個p_name的全局屬性其值爲concat,如果不相等那麼p_name的值就是concat_a(在這裏,表示的是兩個目錄的名字,都在我的F:\ant下),因爲我給的兩個參數的值都是aa相等所以p_name值應該是concat。
      當condition執行完以後就開始執行concat任務了,這個任務就是上面講過的,將hello.txt文件內容寫到控制檯,不過呢,該文件所在的目錄是引用了一個叫p_name的屬性的值,沒錯,該值就是Ant在運行時執行condition任務時生成的,這裏他的值應該是concat,因此,這個文件的執行結果就是將concat目錄下的hello.txt內容讀取輸出到控制檯,如果condition中的equals中兩個參數不相等那麼就是將concat_a目錄下的hello.txt文件內容輸出到控制檯。
      實際上,在condition中的嵌套元素遠遠不止一個equals可以使用具體還包括如:not、and、or、available、os、issert、checksu、http...等等。具體的可以參考相應的文檔,文檔都在下載的ant壓縮包裏。

三、Copy

    此任務用於拷貝目錄、文件到指定位置。
    copy擁有如下參數:
(1)file:要拷貝的文件/目錄。
(2)tofile:拷貝後的文件。
(3)todir:拷貝到指定目錄。
  其他參數就不再詳說了,看文檔就會一目瞭然了~
用法如下:

(1)拷貝文件到另一個文件

	<target name="cmd_copy">
	<copy file="hello.txt" tofile="aaa"></copy>
	</target>
(2)拷貝文件到一個目錄
	<target name="cmd_copy">
	<copy file="aaa" todir="concat"></copy>
	</target>

(3)拷貝目錄到目錄


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章