2012-05-04 9 views
10

Jenkins CIサーバーで実行されるAntビルドタスクでは、YUIコンプレッサーでjavascript(およびcssファイル)を圧縮します。しかし、どのjsファイルにYUIコンプレッサーがエラーを持っているのかを判断することは非常に困難です。出力にAntから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タスクは次のようになります。アリやYUIコンプレッサーの専門家されていない

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

、我々はそこにエラーが起こっているファイル名がどこかに出力されるように行うことができます何かがありますか?

+0

私は同じ問題を抱えています。 jsファイルに構文エラーがあると、jenkinsビルドが失敗します。エラーが発生しているファイルを出力し、それらのファイルをスキップする方法はありますか?そのため、ビルドが失敗することはありません。 – Jugi

答えて

6

yuicompressorの仕組みがわからないので、一度に1つのファイルで動作すると仮定します。

これが当てはまる場合は、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> 
+0

いくつかの小さな変更完全に動作します... –

+0

@KrisErickson - 可能であれば、あなたがしなければならなかった変更を投稿できますか? – Chandranshu

+0

上記のコードが変更されました。 –

2

は、このオプションを使用してみてください:

-v、 表示情報メッセージと警告を--verbose。

あなたのような例のドキュメントでの素敵なエントリがあります:

は、-vオプションを使用することを躊躇しないでください。 JSLintを置き換えるものではありませんが、 があなたのコードに間違っている可能性があると感じると、役に立つヒントを出力します。

+1

-vは非常に冗長ですが、ファイル名は出力されません。 –

+0

YUIコンプレッサーで試すことができるatherオプションはありません。最小限に抑えられたミニマイザは、かなりうまく動作し、そのような情報を提供します。とにかく、最小化する前に、あなたのファイルを常にJSLintする必要があります - 通常、後でYUICによって報告されるエラーは、愚かな側に少しありました... –

+0

私たちはJSHintを行い、エラーはありません。私は、ファイルをYUIで実行する前に、ファイルをエコーする方法がなければならないと考えていますが、私はantについては十分に分かりません。 –

2

あなたは、実行後、またはない要約を印刷するかどうかを

<apply … verbose="true"> 

を試してみました。 Ant 1.6以降。

理想的には、少なくともあなたはファイルセットは通常、破損したファイルにあなたを指している必要がありますされ、最後に成功したファイルを見ることができますファイルを実行しようとするが、その後の要約を持つ前の文を印刷します英数字で配列される。

+0

これは私に '適用された163ファイルと0ディレクトリにJavaを適用します.'まだファイル名がありません – Niek

関連する問題