这不是真正与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的\
分隔符被用作转义字符,所以我的路径因为只有一个非常大字。
我该如何避免这种行为?
答案 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>
的示例。