私が持っているいくつかの特定の質問を先導し、文脈に従ってそれらをフォローします。
- EclipseでのGWTコード検証の構成方法を制御するにはどうすればよいですか?
- GWTコード検証は何をしますか?
- Javaクラスをスキャンしているとき、クラスの読み込みは行われますか?
- クライアント/共有パッケージにないクラスをスキャンするのはなぜですか?そして、どうすればそれを止めることができますか?
EclipseJunoを実行しています。最近、私のチームの別のメンバーがプロジェクトをGWT 2.4から2.5にアップグレードしました。最初に気付いたのは、GWTコード検証がリソースを消費し、ワークスペースを停止させ、最終的にJavaヒープエラーで失敗することでした。日食を殺します。
念のために言っておきますがeclipse.ini
、具体的には、ヒープを十分に構成する必要があります。-Xms256m -Xmx1536m
それでも、ワークスペースの制御を取り戻すために、チェックを外しProject --> Build Automatically
、を使用してヒープ使用量を表示するようにEclipseを構成し、何が起こるかを確認するための実験としてPreferences --> General --> Show Heap Status
ヒープサイズを増やしましたeclipse.ini
。-Xms2048m -Xmx3072m
これを行った後、私は再びEclipseを開き、GWTコード検証フェーズを実行しているときのプログレスバーとヒープサイズに注意を払いながら、自動的にビルドできるようにしました。 2Gの北が消費されました。最終的には完了しました(時間がかかりすぎましたが、妥当な時間ではありませんでした)。それが行われてから1分以内に、巨大なガベージコレクションイベントによってヒープがわずか300メガバイトにまで減少しました。
プログレスバーの下に表示されたものはもっと興味深いものでした。GWTコード検証は*.java
、プロジェクト全体のすべてのファイルをスキャンしているように見えました。パッケージに含まれるファイルだけでなく、すべてのものですclient
。shared
私は、GWTコンパイラーが100万年後には決して見ることのないクラス名を見ました。
したがって、GWTコンパイラはエントリポイントのGWTモジュールファイルから始めてそこから検索するのに十分賢いのですが、GWTコード検証プロセスはすべてを総当たりで検索しているように見えます。
そして、途中でクラスの読み込みを行っている場合、神はそれを助けます。これらの古いサーバー側クラスのいくつかには、静的初期化子などの外部リソースに接続する、私の祖先の古代の罪が含まれています。
この検証を構成して、スキャン対象についてより簡潔にする方法はありますか?