ant macros:fileset as javac src element

时间:2015-10-12 20:12:00

标签: java ant javac macrodef

我有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 个答案:

答案 0 :(得分:0)

尝试调用像

这样的宏
<testm>
    <srcdir>
        <path location="src"/>
    </srcdir>
</testm>

答案 1 :(得分:0)

嵌套在<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>