确定从Ant运行YUI压缩程序时哪个文件出错

确定从Ant运行YUI压缩程序时哪个文件出错,ant,jenkins,yui-compressor,Ant,Jenkins,Yui Compressor,在Jenkins CI服务器上运行ant构建任务期间,我们使用YUI压缩程序压缩javascript(和css文件)。但是,很难确定YUI compressor中的哪些js文件有错误。我们看到了很多事情,比如: [minify-js] [ERROR] 3:35:unterminated string literal [minify-js] [minify-js] [ERROR] 3:35:syntax error [minify-js] [minify-js] [ERROR] 4:8:syn

在Jenkins CI服务器上运行ant构建任务期间,我们使用YUI压缩程序压缩javascript(和css文件)。但是,很难确定YUI compressor中的哪些js文件有错误。我们看到了很多事情,比如:

[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 [minify js][ERROR]3:35:未终止的字符串文字 [缩小js] [minify js][ERROR]3:35:语法错误 [缩小js] [minify js][ERROR]4:8:语法错误 [缩小js] [minify js][ERROR]1:0:编译产生了3个语法错误。 [minify js]org.mozilla.javascript.EvaluatorException:编译产生了3个语法错误。 [minify js]位于com.yahoo.platform.yui.compressor.YUICompressor$1.runtimeError(YUICompressor.java:135) [minify js]位于org.mozilla.javascript.Parser.parse(Parser.java:410) [minify js]位于org.mozilla.javascript.Parser.parse(Parser.java:355) [minify js]位于com.yahoo.platform.yui.compressor.JavaScriptCompressor.parse(JavaScriptCompressor.java:312) [minify js]位于com.yahoo.platform.yui.compressor.JavaScriptCompressor.(JavaScriptCompressor.java:533) [minify js]位于com.yahoo.platform.yui.compressor.YUICompressor.main(YUICompressor.java:112) [minify js]位于sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) [minify js]位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [minify js]位于sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:616)中的[minify js] [minify js]位于com.yahoo.platform.yui.compressor.Bootstrap.main(Bootstrap.java:20) [缩小js]结果: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压缩器方面的专家,我们是否可以采取一些措施,以便将发生错误的文件名输出到某个地方?

尝试使用此选项:

-v、 --冗长 显示信息性消息和警告

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

不要犹豫使用-v选项。虽然不能代替 JSLint,当它感觉到 您的代码可能有问题

你试过了吗

<apply … verbose="true">

执行后是否打印摘要。从Ant 1.6开始


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

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

如果这是真的,你可以用它。您需要提前安装


为@{file}创建压缩程序

恐怕没有其他选项可供您使用YUI压缩机。很少有其他的最小化程序能够很好地工作并提供此类信息。无论如何,在最小化之前,您应该始终JSLint您的文件-通常YUIC稍后报告的错误有点愚蠢…我们会JSHint它们,并且没有错误。我认为ant在通过YUI运行文件之前一定有办法回显文件,但我对ant的了解还不够。哦,所以你没有将文件合并在一起?为了列出文件,你必须修改可执行文件或插件,因为我看不到任何选项来列出可执行文件正在处理的文件。就我个人而言,我是用不同的方式来做的,这意味着我把所有的JS文件作为一个文件放在一起,并在上面运行压缩。如果它吐出一个带有错误的行号,我就去调查那一行……这只会给我提供应用java的163个文件和0个目录。仍然没有filename@KrisErickson-如果可能的话,你能发布你必须做的修改吗?我也有同样的问题。当js文件包含任何语法错误时,jenkins构建将失败。是否有任何方法可以输出有错误的文件并跳过这些文件,以便生成不会失败。?
<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>