0

这不是真正与 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 的分隔符被用作转义字符,所以我的路径只是一个非常大的单词。

我怎样才能避免这种行为?

4

1 回答 1

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

于 2013-07-12T15:06:47.047 回答