Ant 詳解

Ant 詳解

Target屬性:

name: target名字

depends:用逗號分隔的當前target所依賴的target

if/unless:執行target所需要的條件

description:對這個target的一些描述

 

Task屬性:

一個task是一段可執行的代碼。task可以

		<!--在指定的類路徑下是否有可用的資源-->
	  <available resource="TestTest.class">
	     <classpath refid="all.test.classes" />       
	  </available>

 有多個屬性(也可以叫變量)。屬性值可能包含對property的引用。這些應用會在task執行前被解析。

<target name="compile" depends="init">  
<javac srcdir="${src}" destdir="${dest}" />  </target>
 
其中的<javac srcdir="${src}" destdir="${dest}" /> 就是一個task。
 其中的 ${src} 就是對前面定義的property的引用。再執行javac 之前這些${*}會被解析。

 

複製文件到指定位置:

	        <copy file="1.txt" tofile="21.txt" />
		<copy file="myfile.txt" todir="build/newdir" />
		<copyfile src="test.java" dest="subdir/test.java"/>
		<copy todir="build/newdir"> 
			<fileset dir="src_dir"/>
		</copy>
		<copy todir="dest/dir"> 
		    <fileset dir="src_dir" excludes="**/*.java"/>
		</copy> 

 

 刪除文件目錄:

<delete file="/lib/aaa.jar"/>
<delete dir="lib"/>
<delete> 
	<fileset dir="." includes="**/*.bak"/>
</delete>

 移動文件目錄:

<move todir="new/dir">
		<fileset dir="src/dir"> 
			<include name="**/*.jar"/> 
		    <exclude name="**/aaa.jar"/>
		</fileset>
</move> 

 重命名文件:

<rename src="foo.jar" dest="foo-${version}.jar"/>

 

簡歷臨時文件:

<tempfile  property="temp. xml"  destDir="build"  suffix=".bak"/>

調用其他目錄下的build.xml:

<ant antfile="aaa/bbb/build.xml" /> 

<ant antfile="bbb/build.xml" dir="aaa" />

<ant antfile="build.xml" dir="aaa/bbb" />

 

調用其他build.xml文件中的target:

<ant antfile="subproject/subbuild.xml" target="compile"/>

 

使用三方的一些task:首先的導入jar文件,然後通過taskdef的classname制定哪個類來處理

taskdef

    <taskdef name="if" classname="ise.antelope.tasks.IfTask" classpath="${global.dir}/../lib/atg-ant.jar" />

    <taskdef name="else" classname="ise.antelope.tasks.ElseTask" classpath="${global.dir}/../lib/atg-ant.jar" />

MacroDef——“宏”,在Ant中是非常實用的,它的作用相當於java裏面的爲防止代碼重複而提取的公共方法。比如我現在需要將某幾個目錄分別進 行編譯和打包,不使用MacroDef的情況下,如果有10個目錄,那麼我就至少要寫10個類似 的<target></target>來做完對這10個目錄的操作;但在使用MacroDef的情況下,你只用寫一個通用 的<macrodef></macrodef>,再在其他地方調用它就可以了,既減少了代碼量,又提高了工作效率。

<macrodef name="macrodef">
        <attribute name="target" />
        <sequential>
            <subant target="@{target}">
                <property name="skip.run.assembler" value="true" />
                <property name="cobertura.on" value="${cobertura.on}" />
                <property name="junit.fullsuite" value="${junit.fullsuite}" />
                <property name="sql.export.only" value="${sql.export.only}" />
                <filelist refid="module.files" />
            </subant>
        </sequential>
    </macrodef>

 

<filterset id="filterSet" begintoken="@" endtoken="@">
        <filter token="jdbc.url" value="${jdbc.url}" />
        <filter token="jdbc.pub.url" value="${jdbc.pub.url}" />
        <filter token="jdbc.staging.url" value="${jdbc.staging.url}" />

</filterset>

 

 

Condition:

 

		<target name="conditionTest">
			<condition property="term">
				<!--set the property value to true or false -->
				<!--istrue value="true" term=true-->
				<!--istrue value="false" term=false-->
				<!--isfalse value="true" term=false-->
				<!--isfalse value="false" term=true-->
				<isfalse value="true" />
			</condition>
			 <!-- 調用isTrue和isFalse這兩個target-->  
			    <antcall target="isTrue">  
			    </antcall>  
			    <antcall target="isFalse">  
			    </antcall>  
		</target>
		<!-- if條件判斷,成立執行-->  
		<target name="isTrue" if="term">  
		    <echo>is ture</echo>  
		</target>  
		<!-- unless條件判斷,不成立時執行-->  
		<target name="isFalse" unless="term">  
		    <echo>is false</echo>  
		</target>  
             <condition property="term">
                <not>
                    <!--邏輯非,如果istrue 爲true 那麼 term 爲false-->
                    <istrue value="true" />
                </not>
            </condition>

 

 <condition property="scondition">  
        <or>  
            <istrue value="true" />  
            <istrue value="false" />  
        </or>  
    </condition>  

 

		<!--在指定的類路徑下是否有可用的資源-->
	  <available resource="TestTest.class">
	     <classpath refid="all.test.classes" />       
	  </available>

 

 <condition property="scondition">  
        <!--如果屬性name不存在則返回false-->  
        <isset property="name"/>  
    </condition>  

 

	<condition property="scondition">
		<!--如果arg1的值與arg2的值相等返回true,否則爲false-->
		<equals arg1="${prop1}" arg2="${prop2}"/>
	</condition>

 

判斷操作系統 與 執行腳本 :

<os family="unix" />

<condition property="isWindows">
        <os family="windows" />
</condition>

 

如果操作系統是unix執行以下腳本

<exec executable="${app.path}/${app.name}/control/set_templates.sh" osfamily="unix" failοnerrοr="yes" />

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