[英]Getting condition doesn't support the nested "then" element in <condition>
我是 Ant/Apache 的新手。 當我嘗試在 XML 中使用<condition>
標簽時,它拋出了一個錯誤。 條件不支持嵌套的“then”元素。 這是我的代碼
<target name="determine-ae-build">
<condition property="ApplicationName">
<equals arg1="${ApplicationName}" arg2="new"/>
<then>
<echo>3.9 Robots Config Copied</echo>
</then>
<else>
<condition property="ApplicationName">
<equals arg1="${ApplicationName}" arg2="old"/>
<then>
<echo>3.8 Robots Config Copied</echo>
</then>
<else>
<echo>3.9 Robots Config Copied</echo>
</else>
</condition>
</else>
</condition>
</target>
我也嘗試過IF
但因為我的 Ant 版本不支持這樣做。 有人可以幫助解決這個問題。 謝謝! 提前
<target name="prepare-copy" description="copy file based on condition" depends="determine-ae-build, prepare-copy-old, prepare-copy-new, prepare-copy-default">
<sleep seconds="10"/> --To read the results
</target>
<target name="prepare-copy-old" description="copy file based on condition" if="copy.old">
<echo>Old File Copied </echo>
</target>
<target name="prepare-copy-new" description="copy file based on condition" if="copy.new">
<echo>New File Copied</echo>
</target>
<target name="prepare-copy-default" description="copy file based on false condition" if="copy.default">
<echo>Default File Coping</echo>
</target>
<target name="determine-ae-build">
<condition property="copy.old">
<equals arg1="${ApplicationName}" arg2="old"/>
</condition>
<condition property="copy.new">
<equals arg1="${ApplicationName}" arg2="new"/>
</condition>
<condition property="copy.default">
<not>
<or>
<equals arg1="${ApplicationName}" arg2="new"/>
<equals arg1="${ApplicationName}" arg2="old"/>
</or>
</not>
</condition>
</target>
解釋:調用方式“ant -Dcopy.old = true prepare-copy”。 在這里,我們正在傳遞以復制舊文件,因此將復制“舊文件已復制”。 如果你稱它為“ant prepare-copy”,它會調用“Default File Coping”。
如果回答了您的問題,請采納我的回答。謝謝!
condition
任務只是設置一個屬性; 它不包含嵌套構建邏輯。 它設置的屬性稍后可用於控制執行哪些目標。
雖然您可以使用 antcontrib 的額外if
、 then
和else
任務來完成您在示例中展示的內容,但我建議堅持使用本機 Ant 方法,該方法依賴於目標依賴項並使用單獨的目標來控制構建邏輯:
<project name="build" basedir="." default="build">
<target name="build" depends="copy-3.8,copy-3.9" />
<target name="copy-3.8" depends="determine-ae-build" if="copy.old">
<echo>3.8 Robots Config Copied</echo>
</target>
<target name="copy-3.9" depends="determine-ae-build">
<echo>3.9 Robots Config Copied</echo>
</target>
<target name="determine-ae-build">
<condition property="copy.old">
<equals arg1="${ApplicationName}" arg2="old"/>
</condition>
</target>
</project>
使用上面的腳本,您將運行ant build
(可能使用-DApplicationName=old
)。 build
目標取決於兩個copy
目標,這兩個目標都取決於determine-ae-build
。 因此determine-ae-build
目標將首先運行。 如果ApplicationName
設置為“old”(來自已加載的屬性文件,或在命令行中使用-DApplicationName=old
提供),則屬性copy.old
將設置為 true。 否則它將保持未設置狀態。
然后將調用copy-3.8
和copy-3.9
。 如果copy.old
為true
, copy-3.8
將運行。 否則,它將被跳過。 copy-3.9
沒有條件,所以無論如何它都會運行。
最后, build
目標將執行,因為它是從命令行調用的原始目標,但它不包含任何實際步驟,因此構建將完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.