2012-05-04 11 views
10

Comprimiamo i nostri file javascript (e css) con il compressore YUI durante la nostra attività di formica di form in esecuzione sul nostro server CI Jenkins. Tuttavia, è molto difficile determinare con quale js il compressore YUI sta avendo errori. Vediamo un sacco di cose come:Determina quale file ha un errore durante l'esecuzione del compressore YUI da Ant

 
[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 

in uscita, ma non ho idea di quale delle centinaia di JS file l'errore proviene. Il nostro compito formica assomiglia:

<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> 

Non essendo un esperto di compressore formica o YUI, c'è qualcosa che possiamo fare in modo che il nome del file dove c'è l'errore sta accadendo è uscita da qualche parte?

+0

ho avuto lo stesso problema. La creazione di jenkins sta fallendo quando i file js contengono errori di sintassi. C'è un modo per emettere i file che stanno avendo errori e saltare quei file, in modo che la compilazione non venga fallita? – Jugi

risposta

6

Non so come funziona il yuicompressor, presumo che funzioni su un file alla volta.

Se ciò è vero, è possibile farlo con for from ant-contrib. Dovresti installare prima 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> 
+0

Con alcune piccole modifiche, questo funziona totalmente ... –

+0

@KrisErickson - Se è possibile, potresti postare le modifiche che dovevi apportare? – Chandranshu

+0

Le modifiche sono state apportate al codice precedente. –

2

Provare a utilizzare questa opzione:

-v, --verbose Mostra messaggi informativi e avvisi.

C'è una bella voce nella documentazione per i casi come il tuo:

Non esitate a utilizzare l'opzione -v. Sebbene non sia un sostituto per il JSLint , emetterà alcuni suggerimenti utili quando avverte che potrebbe essersi verificato un errore nel codice.

+1

Mentre -v è molto prolisso, non emette il nome del file ... –

+0

Ho paura che non ci sia alcuna opzione che puoi provare con YUI Compressor. Ci sono pochi altri minimizzatori che funzionano abbastanza bene e forniscono quel tipo di informazioni. Ad ogni modo, prima di minimizzare dovresti sempre JSLint i tuoi file - di solito gli errori successivamente riportati da YUIC erano un po 'stupidi ... –

+0

Facciamo JSHint e non ci sono errori da questo. Penso che ci debba essere un modo per far risuonare il file prima di eseguirlo tramite YUI, ma non ne conosco abbastanza. –

2

Hai provato

<apply … verbose="true"> 

se stampare un sommario dopo l'esecuzione o meno. Dal momento che Ant 1.6.

ideale sarebbe stampare una dichiarazione prima il tentativo di eseguire sul file, ma con un riassunto in seguito almeno ti permette di vedere l'ultimo file di successo, che è necessario indicare al file rotta, come i set di file sono di solito sequenziato alfanumerico.

+0

Questo mi dà solo '[applica] Applica java a 163 file e 0 directory. Ancora nessun nome file – Niek