这不是一个真正与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>
的示例。