Макрос макросов: набор файлов как элемент 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>