Задача компиляции Ant macrodef - PullRequest
2 голосов
/ 26 января 2011

У меня есть компилятор (и язык), который я собираю, который обычно вызывается так:

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>.

1 Ответ

1 голос
/ 26 января 2011

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

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

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

...