2009-05-11 6 views
3

GWTはJavaソースをJavascriptにコンパイルし、その内容のハッシュに従ってファイルの名前を付けます。ソースをまったく変更しなくても、javascriptの内容は変化しているので、私はコンパイルするたびに新しいファイルセットを取得しています。Javaソースを変更せずにすべてのGWTコンパイルを新しいjavascriptにする

ファイルはOBFとPRETTY出力では異なりますが、DETAILEDに設定すると、コンパイルごとにファイルの違いはなくなります。 PRETTYでは、コンパイル間の相違点のすべて/ほとんどがtypeIdの値パラメータにあることがわかります。たとえば、initValues()という関数が呼び出され、typeIdパラメータの値が異なります。

+0

私の最初の推測は、ファイルのどこかの日付になりますが、詳細:/ –

+0

はい、私はそれがビルド日付や何かのタイムスタンプだったと思っていましたが、それのようには見えません。 –

答えて

2

PRETTYモードでは、あなたが見違いが型IDのJavaクラスの割り当てです。これは、GWTが実行時の型チェックを管理する方法です。基本的に各スクリプトの一番下の表に、各タイプIDを互換性のあるすべてのスーパークラスにマッピングしていることがわかります。これは、GWTがJavaScriptでClassCastExceptionをスローする方法です(これは非常にまれに実行する必要があります)。

OBFモードでは、その違いは、縮小された関数名の割り当てによるものです。

どちらの場合も、コンパイラがコードを処理する順序が原因です。内部シンボルテーブルの中には、処理のために順序付けられていないコレクションストアシンボルを使用しているものがあります。それは多くの理由で起こる可能性があります。

+0

GWTはクラスをTypeIdsに変換するための決定論的な方法を使用しませんか?これは、私が見ている違い(PRETTYとOBFの両方の型IDは関数名が同じだから)には意味がありますが、一貫したメソッドを使わないのは驚くべきことです。 –

0

私の知る限りでは、GWTは、新しいバージョンにあなたがそれをコンパイルするたびにコンパイルされます、これは機能です;)

それが唯一のGWTのセクションを構築するようにするには、しかし、それを制御するためにアリを使用することができますそれは実際に変更されます場合は、アプリケーション:

http://wiki.shiftyjelly.com/index.php/GWT#Use_The_Power_of_Ant_to_Build_Changes_Only

+0

私の問題は毎回コンパイルしているのではなく、コンパイラの出力が同じソースで毎回異なるということです。これは、GWTがどのように動作するかを記述したものに直接関係し、強力なハッシュ名のcache.htmlファイルとcache.jsファイルの全体を削除します。 –

+0

ちなみに、すでにMavenを使用しています。これは、Mavenのリリースプロセスと、この問題を引き起こすGCJのコンパイルとの間の相互作用です。私はすでに回避策がありますが、なぜGWTがこれをやっているのかを知りたいのです。 –

関連する問題