1

我有 ant (1.9.4) 宏,它们接受类似路径的结构作为 src 参数,当我尝试运行它时,我得到'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>
4

2 回答 2

0

尝试调用宏

<testm>
    <srcdir>
        <path location="src"/>
    </srcdir>
</testm>
于 2015-10-13T12:01:17.440 回答
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>
于 2015-10-13T14:55:13.123 回答