У меня есть компилятор (и язык), который я собираю, который обычно вызывается так:
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>
Я пробовал несколько вариантов вышеупомянутых, но каждая ошибка выглядела примерно так:
/home/jwarner/code/nlang/nc/build.xml:55: Java не поддерживает вложенный элемент «набор файлов».
Есть ли способ сделать это без расширения самого ANT? В качестве альтернативы, было бы довольно легко добавить задачу муравья в мой компилятор? Я не очень разборчив в синтаксисе последнего задания <nc>
.