我們有一個Apache ANT腳本來構建我們的應用程序,然後將生成的JAR文件簽入版本控制(本例中爲VSS)。但是,現在我們有一個變更,需要我們爲這個項目構建2個JAR文件,然後檢查兩個VSS。有沒有辦法來推廣Apache ANT目標?
將原始JAR文件檢入VSS的當前目標通過某些屬性發現JAR文件的名稱。有沒有簡單的方法來「推廣」這個目標,以便我可以重用它來檢查任何名稱的JAR文件?用正常語言來說,這顯然需要一個函數參數,但據我所知,在ANT中確實沒有一個等同的概念。
我們有一個Apache ANT腳本來構建我們的應用程序,然後將生成的JAR文件簽入版本控制(本例中爲VSS)。但是,現在我們有一個變更,需要我們爲這個項目構建2個JAR文件,然後檢查兩個VSS。有沒有辦法來推廣Apache ANT目標?
將原始JAR文件檢入VSS的當前目標通過某些屬性發現JAR文件的名稱。有沒有簡單的方法來「推廣」這個目標,以便我可以重用它來檢查任何名稱的JAR文件?用正常語言來說,這顯然需要一個函數參數,但據我所知,在ANT中確實沒有一個等同的概念。
我建議與macros over subant/antcall一起使用,因爲我發現宏的主要優點是您完全控制了傳遞給宏的屬性(特別是如果您想添加新屬性) 。
您只需重構你的Ant腳本開始與你的目標:
<target name="vss.check">
<vssadd localpath="D:\build\build.00012.zip"
comment="Added by automatic build"/>
</target>
創建宏(注意,複製/粘貼和替換爲@ {文件}):
<macrodef name="private-vssadd">
<attribute name="file"/>
<sequential>
<vssadd localpath="@{file}"
comment="Added by automatic build"/>
</sequential>
</macrodef>
,並調用與您的文件宏:
<target name="vss.check">
<private-vssadd file="D:\build\File1.zip"/>
<private-vssadd file="D:\build\File2.zip"/>
</target>
重構,「螞蟻的方式」
通常認爲版本控制你的二進制文件是一個壞主意,我不建議這樣做。但是如果你絕對必須的話,你可以使用antcall和param結合來傳遞參數並調用目標。
<antcall target="reusable">
<param name="some.variable" value="var1"/>
</antcall>
<target name="reusable">
<!-- Do something with ${some.variable} -->
</target>
您可以找到有關antcall task here的更多信息。
這可能是一個更好的主意,用宏,而不是antcall(見其他答案)。有了antcall,你就會破壞ant的依賴機制,並且最終會產生一些令人困惑的構建日誌。 – 2011-01-11 20:45:00
還檢查了subant任務,它可以讓你調用多個相同的目標生成文件:
<project name="subant" default="subant1">
<property name="build.dir" value="subant.build"/>
<target name="subant1">
<subant target="">
<property name="build.dir" value="subant1.build"/>
<property name="not.overloaded" value="not.overloaded"/>
<fileset dir="." includes="*/build.xml"/>
</subant>
</target>
</project>
您可以使用Gant將您的版本編寫爲groovy,以便完成您想要的任務或查看groovy ant task。
看來,你已經忘記關閉標籤。它應該像`` –
2011-01-29 14:00:52