2
我有一個編譯器(和語言),我構建通常是這樣調用:螞蟻macrodef編譯任務
java -jar nc.jar \
-p some/referenced/package.nc \
-p framework.nc \
source1.ns source2.ns sourceN.ns \
-o output/package.nc
我想包括在我的Ant構建文件調用編譯器編譯任務標準庫和所有的測試用例,但規定每個單獨編譯器調用爲<java>
任務是痛苦的:
<target name="framework" depends="compiler" description="Build the n framework">
<!-- More compile steps -->
<java jar="nc.jar" fork="true">
<arg value="-p"/>
<arg path="../nframework/build/n.core.nc"/>
<arg path="../nframework/n/debug/DebugPrint.ns"/>
<arg path="../nframework/n/debug/Trace.ns"/>
<arg value="-o"/>
<arg path="../nframework/build/n.debug.nc"/>
</java>
<!-- More compile steps -->
</target>
我想建立某種形式的ANT任務,可以簡化成這樣:
<target name="framework" depends="compiler" description="Build the n framework">
<!-- More compile steps -->
<nc output="../nframework/build/n.debug.nc">
<link-package path="../nframework/build/n.core.nc"/>
<src>
<fileset dir="../nframework/n/debug" includes="**/*.ns"/>
</src>
</nc>
<!-- More compile steps -->
</target>
爲此,我試過macrodef:
<macrodef name="nc">
<attribute name="output"/>
<element name="link-package"/>
<element name="src"/>
<sequential>
<java jar="nc.jar" fork="true">
<arg value="-p"/>
<!-- This doesn't do what I want -->
<link-package/>
<!-- Neither does this -->
<src/>
<arg value="-o"/>
<arg path="@{output}"/>
</java>
</sequential>
</macrodef>
我已經嘗試上述幾種變化,但每個錯誤出來的東西,如: /家庭/ jwarner /代碼/ nlang/NC/build.xml:55:java不支持嵌套的「fileset」元素。
有沒有辦法做到這一點,而不擴展ANT本身?或者,向我的編譯器添加一個ant任務是否相當容易?我對最終的<nc>
任務的語法並不挑剔。
你提到你不想擴展Ant本身,但如果你沒有得到一個簡單的答案,你的問題,我想我會提到,創建自己的Ant任務是很容易的。看看http://ant.apache.org/manual/develop.html#writingowntask – 2011-01-26 17:57:14