How do I build a list of file names?

ant, build, java

Solution

You might be able to use the `pathconvert` task, which allows you to specify the separator character as comma.

<target name="getPrependJars">
    <fileset id="appendJars" dir="${project.name}/hotfixes">
        <include name="*.jar" />
    </fileset>
    <pathconvert property="prependJars" refid="appendJars" pathsep="," />

    <echo message="prependJars: ${prependJars}" />
</target>

Problem

I need to write an Ant target that appends together (comma-delimited) a list of '.jar' file names from a folder into a variable, which is later used as input to an outside utility. I am running into barriers of scope and immutability. I have access to ant-contrib, but unfortunately the version I am stuck with does not have access to the 'for' task. Here's what I have so far: ``` <target name="getPrependJars"> <var name="prependJars" value="" /> <foreach param="file" target="appendJarPath"> <path> <fileset dir="${project.name}/hotfixes"> <include name="*.jar"/> </fileset> </path> </foreach> <echo message="result ${prependJars}" /> </target> <target name="appendJarPath"> <if> <equals arg1="${prependJars}" arg2="" /> <then> <var name="prependJars" value="-prependJars ${file}" /> </then> <else> <var name="prependJars" value="${prependJars},${file}" /> </else> </if> </target> ``` It seems that 'appendJarPath' only modifies 'prependJars' within its own scope. As a test, I tried using 'antcallback' which works for a single target call, but does not help me very much with my list of files. I realize that I am working somewhat against the grain, and lexical scope is desirable in the vast majority of instances, but i really would like to get this working one way or another. Does anybody have any creative ideas to solve this problem?

Original source