1

mvn dependency:analyzeと同じ依存関係の洞察を提供するように GWT を取得するにはどうすればよい ですか?

Maven は依存関係について報告できます (宣言されていない依存関係の使用と宣言されていない依存関係の使用)。 gwt.xml で継承の欠落を判断するのは難しいことがわかっているため、GWT に同じことをさせたいと考えています。

システムが依存状態を分析する良い方法はありますか?

ありがとう

ピーター

4

1 に答える 1

2

私はそのようなツールを知りません。GWT の依存関係を分析してレポートするためのユーティリティは興味深いものになると思いますが、うまく定義するのは難しいと思います。

使用済みで宣言されていない依存関係

これを解決しようとする前に、何が問題なのですか? Maven では、このカテゴリは Class が直接依存していない依存関係から読み込まれることを意味しますが、代わりに推移的に読み込まれます。これは、推移的な依存関係 (GWT に存在する) とスコープ (存在しない) の問題全体に影響を及ぼし始めます。A が C のクラスを使用しているが、C に依存している B のみに依存している場合、これは「使用済み、宣言されていない依存関係」リストにリストされます。

しかし、GWT では、直接使用するすべての依存関係をリストすることはめったにありません。代わりに、推移的な依存関係は推移的なままであると想定しています -com.google.gwt.user.RemoteServiceすでにリストされている限り、わざわざ RPCを継承する必要はありませんcom.google.gwt.user.User

では、宣言されていない依存関係を使用しているかどうかをどのように判断できますgwt:compileか? .gwt.xmlおそらく、そのようなツールはクラスパス上のすべてのファイルを見つけて<source>、その<super-source>ルールを読み込んで、使用しているクラスが宣言されている場所を探すことができますか? または、何かを呼び出して非具象型を取得する場合は、ルールGWT.createを探します。コードがすでに Java でコンパイルされている限り、クラスはクラスパス上にありますが、クラスがそこにある間にまたはファイルが存在しない可能性があるというリスクは依然としてあります。<replace-with><generate-with>.java.gwt.xml

未使用の宣言された依存関係

これは簡単な問題のように思えます - 継承しているモジュールを分析し、削除できるモジュールがないか調べてください。残念ながら、上記の説明で指摘されているように、クラスとそれらが含まれているパッケージ、使用されていない要素を探すことはできません。<source>ルール<super-source><replace-with>ルールを追加するだけの の<generate-with>ようなものを検討する必要があります。com.google.gwt.user.RemoteService一部の構成の詳細、またはcom.google.gwt.user.RemoteServiceObfuscateTypeNamesRemoteService モジュールの 1 つの設定のみを変更する . RemoteServiceObfuscateTypeNames が削除された場合でも、すべてがコンパイルされますが、アプリケーションにコンパイルされた RPC クラスに関する予期しない情報が存在する可能性があります。

これらを念頭に置いて、おそらくそのようなツールは、現在のビルドで考えられるすべての rebind ルール、およびすべての構成設定、プロパティなどを監視し、それらのルールのいずれかがgwt:compileプロセス中に使用されていないかどうかを確認できます。次に、どのモジュールに未使用の部分があるかを示し、モジュール (およびその継承されたすべてのモジュール) が未使用である場合は、ユーザーに削除可能として示すことができます。

もう 1 つ重要な点:<inherits>ステートメントを定義するときは、順序が重要です。の継承を追加しcom.google.gwt.logging.Logging、その後に を追加するとcom.google.gwt.logging.LoggingDisabled、ロギング クラスがソース パスに配置され、コンパイルされますが、効果はありません。しかし、これらの順序が逆の場合、それらはソース パス上にあるだけでなく、すべて機能します。したがって、使用されているモジュールと使用されていないモジュールの分析には、推移的な継承ステートメントとその順序も含める必要があります。

于 2012-10-17T21:15:24.767 に答える