Ant映射器返回转义路径

时间:2013-07-12 13:11:38

标签: java ant

这不是真正与YUI相关的问题。

我正在尝试使用YUI Compressor(实际上是.jar应用程序)来处理多个JS文件。我想自动获取这些文件(而不是在build.xml中指定每个文件的名称)。

这是我的build.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<project name="CUIProject" default="prod">

<target name="-load.properties">
<loadproperties>
  <file file="minify.properties"/>
</loadproperties>
</target>

<!--Minify JS files-->
<target name="-js.minify">
<apply executable="java" parallel="false" dest="${build.dir}">
    <fileset dir="${src.dir}"/>
    <mapper>
        <globmapper from="*.js" to="*-min.js" handledirsep="yes"/>
    </mapper>
    <arg value="-jar"/>
    <arg path="${minifier.dir}"/>
    <srcfile/>
    <arg value="-o"/>
    <targetfile/>
</apply>
</target>


<!--Build-->
<target name="prod"
depends="
-load.properties,
-js.minify
">
</target>
</project>

问题是我得到了一个FileNotFound异常,因为由于某种原因<targetdir/>以某种方式被转义:来自Windows的\分隔符被用作转义字符,所以我的路径因为只有一个非常大字。

我该如何避免这种行为?

1 个答案:

答案 0 :(得分:2)

我和YUI有同样的问题。我找到的最简单方法是使用Ant-Contrib <for>任务。

<taskdef resource="net/sf/antcontrib/antlib.xml">
    <classpath>
        <fileset dir="${antlib.dir}/antcontrib">
            <include name="*.jar"/>
        </fileset>
    </classpath>
</taskdef>

<!-- Minimize Concatinated JavaScript Files -->
<for param="concat.dir">
    <dirset dir="${work.js.dir}">
        <include name="*"/>
    </dirset>
    <sequential>
        <echo message="[java] Minimized @{concat.dir}/concat-${build.id}-min.js>"/>
        <java jar="${yui.compressor.jar}"
            failonerror="true"
            fork="true">
            <arg value="-o"/>
            <arg value="@{concat.dir}/concat-${build.id}-min.js"/>
            <arg value="@{concat.dir}/concat-${build.id}.js"/>
        </java>
    </sequential>
</for>

另请查看<pathconvert>任务。这会将路径分隔符从一个OS转换为另一个OS。这可能会解决您的问题。 Ant手册中的File Mapper page包含一些使用<pathconvert>的示例。