Ant:从** / *文件集选择器获取文件目录

时间:2012-05-16 17:41:56

标签: ant html5boilerplate build-tools

我正在尝试修复HTML5 Boilerplate ant任务中的错误。 这是一个“清单”目标,用于自动创建html5缓存清单文件。

3 the build script中的第717行是有错误的区域:

            <!-- add image files -->
            <echo message="Updating the site.manifest with the images"/>
            <for param="file">
                <path>
                    <fileset dir="./${dir.source}/${dir.images}/" includes="**/*"/>
                </path>
                <sequential>
                    <basename property="filename.@{file}" file="@{file}" />
                    <replaceregexp match="# image files" replace="# image files${line.separator}${dir.images}/${filename.@{file}}" file="${dir.intermediate}/${file.manifest}" />
                </sequential>
            </for>

问题是,给定目录结构如:

img/image1.jpg
img/subdir/image2.jpg

输出忽略子目录:

img/image1.jpg
img/image2.jpg

解决此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我明白了:

            <!-- add image files -->
            <echo message="Updating the site.manifest with the images"/>
            <for param="file">
                <path>
                    <fileset dir="./${dir.source}/${dir.images}/" includes="**/*"/>
                </path>

                <sequential>
                    <path id="fullPath.@{file}">
                        <pathelement location="@{file}" />
                    </path> 
                    <pathconvert property="relPath.@{file}" refid="fullPath.@{file}">
                        <globmapper from="${basedir}/*" to="*" />
                    </pathconvert>
                    <replaceregexp match="# image files" replace="# image files${line.separator}${relPath.@{file}}" file="${dir.intermediate}/${file.manifest}" />
                </sequential>
            </for>

获取元素的绝对路径,然后使用globmapper删除$ {basedir}部分,该部分保留图像的相对路径。