2011-01-26 5 views
2

У меня есть компилятор (и язык) Я строю, который обычно вызывается следующим образом:Ant 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/пс/build.xml: 55: java не поддерживает вложенный элемент «набор файлов».

Есть ли способ сделать это без расширения ANT? В качестве альтернативы, было бы довольно легко добавить муравьиную задачу в мой компилятор? Я не ужасно придирчив к синтаксису итоговой задачи <nc>.

+1

Вы сказали, что вы не хотите, чтобы продлить саму Ant, но если вы не получите простой ответ на вашу проблему, я думал, что я упомяну, что создать свой собственный Ant задачу очень легко. Взгляните на http://ant.apache.org/manual/develop.html#writingowntask –

+0

Это может означать, что именно это говорит? не может взять набор файлов. Вам нужно будет передать ваши пути в виде строки, например ../nframework/n/debug. Я сам копировал задачу javac. –

+0

@ Кевин: Вы правы - я просто посмотрел на это, и это кажется намного легче, чем я думал. Тем более, что этот подход «» подходит, если вы отправили «Extend Ant» в качестве ответа (возможно, с примером того, какие методы должны быть определены в классе задач), я бы принял его. –

ответ

1

У меня была аналогичная проблема в прошлом, когда устаревшие задачи Ant не совсем делали то, что я хотел, чтобы они делали. Я обнаружил, что очень легко написать свою собственную задачу Ant.

Документация краткая, но неплохо объясняет, что вам нужно делать.

http://ant.apache.org/manual/develop.html#writingowntask