从Ant运行YUI压缩器时确定哪个文件有错误

时间:2012-05-04 18:13:14

标签: ant jenkins yui-compressor

我们在Jenkins CI服务器上运行的ant构建任务期间使用YUI压缩器压缩我们的javascript(和css文件)。但是,确定哪些js文件YUI压缩器有错误是非常困难的。我们看到了很多类似的东西:

[minify-js] [ERROR] 3:35:unterminated string literal
[minify-js] 
[minify-js] [ERROR] 3:35:syntax error
[minify-js] 
[minify-js] [ERROR] 4:8:syntax error
[minify-js] 
[minify-js] [ERROR] 1:0:Compilation produced 3 syntax errors.
[minify-js] org.mozilla.javascript.EvaluatorException: Compilation produced 3 syntax errors.
[minify-js]     at com.yahoo.platform.yui.compressor.YUICompressor$1.runtimeError(YUICompressor.java:135)
[minify-js]     at org.mozilla.javascript.Parser.parse(Parser.java:410)
[minify-js]     at org.mozilla.javascript.Parser.parse(Parser.java:355)
[minify-js]     at com.yahoo.platform.yui.compressor.JavaScriptCompressor.parse(JavaScriptCompressor.java:312)
[minify-js]     at com.yahoo.platform.yui.compressor.JavaScriptCompressor.(JavaScriptCompressor.java:533)
[minify-js]     at com.yahoo.platform.yui.compressor.YUICompressor.main(YUICompressor.java:112)
[minify-js]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[minify-js]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[minify-js]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[minify-js]     at java.lang.reflect.Method.invoke(Method.java:616)
[minify-js]     at com.yahoo.platform.yui.compressor.Bootstrap.main(Bootstrap.java:20)
[minify-js] Result: 2

在输出中,但我不知道错误来自数百个JS文件中的哪一个。我们的ant任务看起来像:

<target name="minify-js">
    <apply executable="yuicompressor" parallel="false" dest="${global.dir}/" taskname="minify-js" force="true">
        <fileset dir="${global.dir}/" includes="**/*.js">
            <exclude name="*.min.js" />
        </fileset>
        <arg value="--type=js" />
        <srcfile />
        <arg value="-o" />
        <targetfile />
        <mapper type="identity" />
    </apply>
</target>

不是Ant或YUI压缩器的专家,我们可以做些什么,以便在某处输出发生错误的文件名?

3 个答案:

答案 0 :(得分:6)

我不知道yuicompressor是如何工作的,我假设它一次只能处理一个文件。

如果是这样,您可以使用for from ant-contrib执行此操作。您需要先安装ant-contrib

<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="${global.dir}/bin_data/ant-contrib-0.6.jar"/>
<for param="file">
  <path>
    <fileset dir="${global.dir}/" includes="**/*.js">
      <exclude name="*.min.js" />
    </fileset>
  </path>
  <sequential>
    <echo>youcompressor for @{file}</echo> <!-- Will output each file and help debugging -->
    <exec executable="yuicompressor"> <!-- I took the args from the official documentation-->
      <arg value="--type=js" />
      <arg value="-o" />
      <arg value="'.js$:-min.js'" />
      <arg value="@{file}" />
    </exec>
  </sequential>
</for>

答案 1 :(得分:2)

尝试使用此选项:

  

-v, - verbose        显示信息性消息和警告。

在像您这样的案例的文档中有一个很好的条目:

  

不要犹豫,使用-v选项。虽然不是替代品   JSLint,它会在感知到时输出一些有用的提示   你的代码可能有问题。

答案 2 :(得分:2)

你试过吗

<apply … verbose="true">
  

是否在执行后打印摘要。自从Ant 1.6。

理想情况下,它会在尝试在文件上执行之前打印一条语句,但之后有一个摘要,至少可以让您看到最后一个成功的文件,它应该指向已损坏的文件作为文件集通常按字母数字顺序排列。