一部のクラスがアプリで効果的に使用されている時期を一覧表示するツールはありますか?さらに良いことに、JARライブラリを自動的にトリミングして、参照と使用の両方のクラスのみを提供するツールはありますか?
4 に答える
停止性問題によって証明されているように、特定のクラスが使用されている、または使用されていないことを明確に言うことはできないことに注意してください。少なくとも、適度に複雑なアプリケーションでは。これは、クラスがコンパイル時にバインドされるだけでなく、ロードできるためです。
- XML構成に基づく(例:Spring);
- プロパティファイル(JDBCドライバ名など)からロードされます。
- 注釈を付けて動的に追加。
- 外部入力(ユーザー入力、データベースからのデータ、リモートプロシージャコールなど)の結果としてロードされます。
- 等
したがって、ソースコードを見るだけでは十分ではありません。そうは言っても、合理的なIDEであれば、依存関係分析ツールが提供されます。IntelliJは確かにそうです。
本当に必要なのは、アプリケーションが実行していることに関するランタイムインストルメンテーションですが、それでも保証されません。結局のところ、入力の奇妙な組み合わせが原因で、特定のコードパスが1,000万回に1回実行される可能性があるため、カバーされていることを保証することはできません。
ただし、このようなツールにはある程度の価値があります。あなたはエマのようなものを見たいかもしれません。Yourkitのようなプロファイラーは、分析も実行できるコードダンプを提供できます(ただし、一時的なオブジェクトをうまく取得することはできません)。
個人的には、IDEが教えてくれる以上の価値はほとんどありません。未使用のJARを削除することです。それよりもきめ細かくすることは、利益がほとんどないかまったくないという問題を求めているだけです。
はい、 ProGuardが必要です。これは完全に無料のJavaコードシュリンクおよび難読化ツールです。設定が簡単で、高速で効果的です。
JarJarhttp://code.google.com/p/jarjar/を試してみてください
jarの依存関係を調整します。
ほとんどの場合、javac を使用するだけで非常に簡単に実行できます。
既存のクラス ファイルを削除します。エントリ クラスの名前を指定して javac を呼び出します。必要なクラスをコンパイルしますが、それ以上はコンパイルしません。ジョブ完了。