代码之家  ›  专栏  ›  技术社区  ›  AndreiM

如何建立文件名列表?

  •  4
  • AndreiM  · 技术社区  · 14 年前

    我需要编写一个Ant目标,将文件夹中的“.jar”文件名列表附加到一个变量中(逗号分隔),该变量稍后用作外部实用程序的输入。 我遇到了范围和不变性的障碍。我可以访问ant contrib,但不幸的是,我所使用的版本无法访问“for”任务。以下是我目前掌握的情况:

    <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>
    

    “appendJarPath”似乎只在其自身范围内修改“prependJars”。作为测试,我尝试使用“antcallback”,它适用于单个目标调用,但对我的文件列表帮助不大。

    我意识到我在某种程度上违背了规则,词汇范围在绝大多数情况下都是可取的,但我真的希望以这样或那样的方式实现这一点。有人有什么创造性的想法来解决这个问题吗?

    3 回复  |  直到 13 年前
        1
  •  9
  •   martin clayton egrunin    13 年前

    您可能可以使用 pathconvert task ,它允许您将分隔符指定为逗号。

    <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>
    
        2
  •  2
  •   Andreas Dolk    14 年前

    在ant中,您只需定义任务( taskdef )然后像所有其他任务一样使用。

    这是我的建议 tutorial

        3
  •  2
  •   rsp    7 年前

    如果系统路径格式对您有用,则可以使用以下格式:

    <target name="getPrependJars">
        <path id="prepend.jars.path">
            <fileset dir="${project.name}/hotfixes">
                <include name="*.jar"/>
            </fileset>
        </path>         
        <property name="prependJars" value="${toString:prepend.jars.path}" />
    
        <echo message="result ${prependJars}" />
    </target>