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中的分隔符被用作转义字符,所以我的路径只因为一个很大的单词。

我该如何避免这种行为?

我对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>任务。这将把路径分隔符从一个操作系统转换为另一个操作。这可能会解决您的问题。Ant手册中的File Mapper页面包含了一些使用<pathconvert>的示例。

相关内容

  • 没有找到相关文章

最新更新