ant复制资源的多个源目录

Mar*_*cki 8 ant

考虑最小的build.xml片段,它从源构建jar并包含所有非java资源:

<property name="src.dir" value="src" />

<target name="build">
    <javac destdir="bin">
        <src path="${src.dir}" />
    </javac>
    <copy includeemptydirs="false" todir="bin">
        <fileset dir="${src.dir}">
            <exclude name="**/*.java" />
        </fileset>
    </copy>
    <jar destfile="dist/foo.jar" basedir="bin"/>
</target>
Run Code Online (Sandbox Code Playgroud)

现在假设我需要支持源目录列表:

<property name="src.dirs" value="src;src-gen" />
Run Code Online (Sandbox Code Playgroud)

我如何修改上面的脚本来实现它? javac我会很高兴地获取目录列表但是对于副本我需要将字符串转换为带有排除项的文件集列表或者找到其他方法.

Dav*_* W. 9

通常,您只需将它们全部列在一起:

<javac destdir="bin">
    <src path="${src.dir}"/>
    <src path="${src2.dir}"/>
    <src path="${src3.dir}"/>
</javac>
Run Code Online (Sandbox Code Playgroud)

您可以尝试该<sourcepath/>属性.我从来没有使用它,但我相信你可以使用它来定义各种源文件的路径,并使用它:

<path id="source.path">
    <pathelement path="${src.dir}"/>
    <pathelement path="${src2.dir}"/>
    <pathelement path="${src4.dir}"/>
</path>

<javac destdir="bin">
    srcpathref="source.path"/>
Run Code Online (Sandbox Code Playgroud)

第一个会工作,但不是100%肯定第二个.


Ian*_*rts 4

我不确定如何使用内置 Ant 任务来完成此任务,但您可以使用ant-contrib<for>任务

<path id="src.path">
  <pathelement location="src" />
  <pathelement location="src-gen" />
</path>

<target name="build">
    <javac destdir="bin">
        <src refid="src.path" />
    </javac>
    <for param="dir">
        <path refid="src.path" />
        <sequential>
            <copy includeemptydirs="false" todir="bin">
                <fileset dir="@{dir}">
                    <exclude name="**/*.java" />
                </fileset>
            </copy>
        </sequential>
    </for>
    <jar destfile="dist/foo.jar" basedir="bin"/>
</target>
Run Code Online (Sandbox Code Playgroud)