正如Ian Roberts已經提到的,你需要的螞蟻的Contrib罐子,然後設置<taskdef/>
指向這個罐子。我強烈建議將其放入您的項目中,並將其檢入您的版本控制系統。這樣,當有人簽出您的項目時,他們已經安裝了Ant-Contib.jar 。
我的標準是把爲構建所需的所有可選的罐子(編制要求不罐子)目錄${basedir}/antlib
,然後把每個可選罐子在自己的目錄,所以我會把ant-contrib-1.0b3.jar
爲${basedir}/antlib/antcontrib
。
然後我定義任務是這樣的:
<property name="antlib.dir" value="${basedir}/antlib"/>
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<fileset dir="${antlib.dir}/antcontrib"/>
</classpath>
</taskdef>
這樣一來,如果你更新的jar文件到Ant的罐子的Contrib的新版本,你只需將其插入目錄。您不必更新build.xml
。
另請注意,我使用net/sf/antcontrib/antlib.xml
而不是net/sf/antcontrib/antcontrib.properties
。 XML文件是你應該使用。這方面的指示在tasks page上,與安裝指導下的main page不同。原因是XML文件具有<for>
任務的正確定義,屬性文件不具有。
然而,還有另一種方式來做到if
和unless
在螞蟻1.9.1無需可選的jar文件。這些是新的If and Unless entity attributes。
這些可以放在所有任務,或子實體,並且通常可以代替螞蟻的Contrib if/else
東西:
<target name="move">
<available file="${output.dir}" type="dir"
property="output.dir.exists"/>
<echo message"Directory exists"
if:true="output.dir.exists"/>
<move file="${output.dir}" tofile="${output.dir}_1"
if:true="output.dir.exists"/>
<property name="newdirectory" value="${dest}"
if:true="output.dir.exists"/>
<echo message="Directory does not exists"
unless:true="output.dir.exists"/>
<move file="${newdirectory}" todir="C:\reports" />
</target>
不那麼幹淨如你的榜樣。不過,我會改用目標名稱if=
和unless=
參數:
<target name="move.test">
<available file="${output.dir}" type="dir"
property="output.dir.exists"/>
</target>
<target name="move"
depends="move.test, move.exists, move.does.not exists">
<move file="${newdirectory}" todir="C:\reports" />
</target>
<target name="move.exists"
if="output.dir.exists">
<echo message="Directory exists" />
<move file="${output.dir}" tofile="${output.dir}_1"/>
<property name="newdirectory" value="${dest}"/>
</move.exists/>
<target name="move.does.not.exists"
unless="output.dir.exists"/>
<echo message="Directory does not exist" />
</target>
如果沒有回聲的一切,結構會有點清潔:
<target name="move.test">
<available file="${output.dir}" type="dir"
property="output.dir.exists"/>
</target>
<target name="move"
depends="move.test, backup">
<move file="${newdirectory}" todir="C:\reports" />
</target>
<target name="backup"
if="output.dir.exists">
<move file="${output.dir}" tofile="${output.dir}_1"/>
<property name="newdirectory" value="${dest}"/>
</move.exists/>
你們又添加了必要的對於[ant-contrib](http://ant-contrib.sourceforge.net/),''?請記住,Ant沒有內置的本地if/else構造。 –
是的,我也嘗試過。有另一個錯誤說:[[taskdef]無法從資源net/sf/antcontrib/antcontrib.properties加載定義,無法找到它。「 – user2677829