在Jenkins CI Server上运行的蚂蚁构建任务期间,我们使用YUI压缩器压缩javascript(和css文件)。但是,很难确定YUI压缩器使用哪个js文件出错。我们看到很多东西,例如:
[minify-js] [错误] 3:35:未终止的字符串文字 [minify-js] [minify-js] [错误] 3:35:语法错误 [minify-js] [minify-js] [错误] 4:8:语法错误 [minify-js] [minify-js] [错误] 1:0:编译产生了3个语法错误。 [minify-js] org.mozilla.javascript.EvaluatorException:编译产生3个语法错误。 [minify-js],位于com.yahoo.platform.yui.compressor.YUICompressor $ 1.runtimeError(YUICompressor.java:135) 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上的[minify-js]。(JavaScriptCompressor.java:533) com.yahoo.platform.yui.compressor.YUICompressor.main(YUICompressor.java:112)上的[minify-js] [minify-js],位于sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) [minify-js]在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [minify-js],位于sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [minify-js],位于java.lang.reflect.Method.invoke(Method.java:616) com.yahoo.platform.yui.compressor.Bootstrap.main上的[minify-js](Bootstrap.java:20) [minify-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压缩器方面的专家,我们可以做些什么,以便将发生错误的文件名输出到某个地方?
我不知道yuicompressor的工作方式,我假设它一次只能处理一个文件。
如果是这样,则可以使用ant-contrib中的for来实现。您需要先安装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>