既存のアプリケーションには、そのクラスパスに1トンのJARファイルがあります。誰かが必ず最初にすべてのJARを追加しておく必要があります。いくつかのJARは明らかに使用されていませんでした。私たちはすでにこれらの不要なJARを問題なく削除しました。アプリケーションで使用されているJARを確認する方法
どのJARが使用されているか、どのJARが不要なのか(試行錯誤の他に)
既存のアプリケーションには、そのクラスパスに1トンのJARファイルがあります。誰かが必ず最初にすべてのJARを追加しておく必要があります。いくつかのJARは明らかに使用されていませんでした。私たちはすでにこれらの不要なJARを問題なく削除しました。アプリケーションで使用されているJARを確認する方法
どのJARが使用されているか、どのJARが不要なのか(試行錯誤の他に)
Tattletaleは、このための優れたツールです。それはバイトコード上で動作するので、いくつかのクラスはリフレクションを介して使用され、レポートには登場しない可能性があります。
Here(リンクはもう機能しません))は、レポート例です。ご覧のとおり、「未使用JAR」の機能があります。
JARを削除するとアプリケーションの起動が妨げられず(正常に動作する)、正常に動作する可能性があるため、アプリケーションがクラスを動的にロードする場合(特に、Class.forName
)、試行錯誤だけで問題になる可能性があることに注意してください。後でターゲットクラスが見つからない場合
また、Javaアプリケーションを分析して依存関係を見つけるために使用できる多くのツールがあります(この目的では正確ではありませんが、Dependency Finderを使用しました)。しかし、ほとんどの場合、クラスを見つけることもできません上記のように動的にロードされます。
それらが動的にロードされている場合、自動化され – ZoFreX
これらのいずれかが動的に読み込まれると、自動化されたツールでそれらが欠落する可能性があります。私はファイルのアクセス時間をリセットし、しばらくの間アプリケーションを実行して(できるだけ多くの機能を呼び出すようにしてください)、アクセスされたファイルとアクセスされなかったファイルを確認します。場合によっては、アプリケーションを実行する必要がある各プラットフォームでこれを繰り返す必要があるかもしれません。
jbossポータルプロジェクトで次のシェルスクリプトを使用して、インポートステートメントで使用されるjarファイルのリストを取得しました。この意志は直接的な依存関係のために働くだけで、動的にロードされたり、ソースで完全修飾されたクラス名が使用された場合には機能しません。さらに、すべてのjarファイルとその推移的な依存関係は、コンテナによって提供されるため、コードをコンパイルするためにのみ必要です。
目標は、プロジェクトのmaven pomを作成して、Nexusリポジトリマネージャに配備する必要のあるファイルを見つけることでした。 のファイルが必要な場合は、というファイルをリストするための出発点として役立ちます。残りのjarファイルは、他の方法でチェックする必要があります。 jarがMavenリポジトリでも利用可能な場合は、その依存関係を調べることができます。
#!/bin/sh
JBOSS_HOME=/path/to/jboss/installation
JBOSS_LIB=$JBOSS_HOME/server/default/lib
JBOSS_DEPLOY=$JBOSS_HOME/server/default/deploy
SRC_DIR=src
for f in $JBOSS_LIB/*.jar $JBOSS_DEPLOY/jboss-portal.sar/lib/*.jar $JBOSS_DEPLOY/jboss-portal.sar/portal-cms.sar/lib/*.jar $JBOSS_DEPLOY/ejb3.deployer/*.jar
do
for c in `jar -tf $f | tr '/$' '..'`
do
#echo "^import ${c%.class};"
if `grep "^import ${c%.class};" -h -r $SRC_DIR -q`
then
echo $f $c
fi
done
done
これを試しました。使用されていない瓶の数を指摘することはできましたが、私が意図的にプロジェクトに追加したいくつかの瓶を紛失しました。まだ使いやすさと詳細なレポートのために推奨されるツールです。ありがとう。 –