Макрос макросов: набор файлов как элемент javac src

У меня есть муравьи ant (1.9.4), которые принимают траекториальную структуру как src param, и когда я пытаюсь запустить ее, я получаю 'FILE_NAME.java is not a directory',

Мой файл сборки:

<project name="test" default="main">
    <macrodef name="testm">
        <element name="srcdir"/>
        <sequential>
            <javac destdir="target">
                <src>
                    <srcdir/>
                </src>
            </javac>
        </sequential>
    </macrodef>

    <target name="build-project">
        <testm>
            <srcdir>
                <fileset dir="src">
                    <include name="**/*.java"/>
                </fileset>
            </srcdir>
        </testm>
    </target>

    <target name="main" depends="build-project"/>
</project>

2 ответа

Попробуйте назвать макросы как

<testm>
    <srcdir>
        <path location="src"/>
    </srcdir>
</testm>

<src> вложенный под <javac> не может иметь <srcdir> вложенный в это.

Вместо этого передайте <src> от абонента <testm>...

<macrodef name="testm">
    <element name="srcdir"/>
    <sequential>
        <!-- Nest <srcdir> directly under <javac> -->
        <javac destdir="target">
            <srcdir/>
        </javac>
    </sequential>
</macrodef>

<target name="build-project">
    <testm>
        <srcdir>
            <!-- Pass <src> directly to <javac> via the macrodef -->
            <src path="src"/>
        </srcdir>
    </testm>
</target>

Я удалил <include name="**/*.java"/> так как <javac> включает в себя все **/*.java файлы по умолчанию.

В качестве другого примера, вы можете передать несколько <javac> варианты <testm> с одним аргументом...

<macrodef name="testm">
    <element name="javac-args"/>
    <sequential>
        <javac destdir="target">
            <javac-args/>
        </javac>
    </sequential>
</macrodef>

<target name="build-project">
    <testm>
        <javac-args>
            <src path="src"/>
            <classpath>
                <pathelement location="my.jar"/>
            </classpath>
        </javac-args>
    </testm>
</target>
Другие вопросы по тегам