2

私は通常このように呼び出されるコンパイラ(および言語)を構築しています:

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はネストされた「fileset」要素をサポートしていません。

ANT自体を拡張せずにこれを行う方法はありますか?あるいは、コンパイラにantタスクを追加するのはかなり簡単でしょうか?私は最終的な<nc>タスクの構文についてひどくうるさくはありません。

4

1 に答える 1

1

私は過去に同様の問題を抱えていました。すぐに使えるAntタスクでは、私が望んでいたことを完全には実行できませんでした。自分のAntタスクを書くのはとても簡単だとわかりました。

ドキュメントは簡潔ですが、何をする必要があるかを説明するのに役立ちます。

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

于 2011-01-26T18:51:53.743 に答える