繁体   English   中英

如何构建文件名列表?

[英]How do I build a list of file names?

我需要编写一个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',它适用于单个目标调用,但对我的文件列表没有多大帮助。

我意识到我在某种程度上违背了这个问题,并且在绝大多数情况下,词法范围是可取的,但我真的希望以某种方式使用它。 有没有人有任何创意来解决这个问题?

您可以使用pathconvert任务 ,该任务允许您将分隔符指定为逗号。

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

我只是用Java编写一个自定义任务,(1)获取文件夹名称,(2)汇编结果字符串,(3)将其存储到$ {prependJars}属性。

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

当我面对一个类似的问题时,我做了一次,发现它非常非常容易。

这是教程

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM