У меня есть компилятор (и язык) Я строю, который обычно вызывается следующим образом: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>
.
Вы сказали, что вы не хотите, чтобы продлить саму Ant, но если вы не получите простой ответ на вашу проблему, я думал, что я упомяну, что создать свой собственный Ant задачу очень легко. Взгляните на http://ant.apache.org/manual/develop.html#writingowntask –
Это может означать, что именно это говорит? не может взять набор файлов. Вам нужно будет передать ваши пути в виде строки, например ../nframework/n/debug . Я сам копировал задачу javac. –
@ Кевин: Вы правы - я просто посмотрел на это, и это кажется намного легче, чем я думал. Тем более, что этот подход «» подходит, если вы отправили «Extend Ant» в качестве ответа (возможно, с примером того, какие методы должны быть определены в классе задач), я бы принял его. –