2011-01-26 178 views
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>任務的語法並不挑剔。

+1

你提到你不想擴展Ant本身,但如果你沒有得到一個簡單的答案,你的問題,我想我會提到,創建自己的Ant任務是很容易的。看看http://ant.apache.org/manual/develop.html#writingowntask – 2011-01-26 17:57:14

回答

1

我過去曾經遇到過類似的問題,即開箱即用的Ant任務並沒有完全做我想讓他們做的事情。我發現編寫我自己的Ant任務非常簡單。

該文檔簡潔,但很好的解釋你需要做什麼。

​​