2010-11-19 12 views
15

既存のアプリケーションには、そのクラスパスに1トンのJARファイルがあります。誰かが必ず最初にすべてのJARを追加しておく必要があります。いくつかのJARは明らかに使用されていませんでした。私たちはすでにこれらの不要なJARを問題なく削除しました。アプリケーションで使用されているJARを確認する方法

どのJARが使用されているか、どのJARが不要なのか(試行錯誤の他に)

答えて

7

Tattletaleは、このための優れたツールです。それはバイトコード上で動作するので、いくつかのクラスはリフレクションを介して使用され、レポートには登場しない可能性があります。

Hereリンクはもう機能しません))は、レポート例です。ご覧のとおり、「未使用JAR」の機能があります。

+0

これを試しました。使用されていない瓶の数を指摘することはできましたが、私が意図的にプロジェクトに追加したいくつかの瓶を紛失しました。まだ使いやすさと詳細なレポートのために推奨されるツールです。ありがとう。 –

5

JARを削除するとアプリケーションの起動が妨げられず(正常に動作する)、正常に動作する可能性があるため、アプリケーションがクラスを動的にロードする場合(特に、Class.forName)、試行錯誤だけで問題になる可能性があることに注意してください。後でターゲットクラスが見つからない場合

また、Javaアプリケーションを分析して依存関係を見つけるために使用できる多くのツールがあります(この目的では正確ではありませんが、Dependency Finderを使用しました)。しかし、ほとんどの場合、クラスを見つけることもできません上記のように動的にロードされます。

+0

それらが動的にロードされている場合、自動化され – ZoFreX

0

これらのいずれかが動的に読み込まれると、自動化されたツールでそれらが欠落する可能性があります。私はファイルのアクセス時間をリセットし、しばらくの間アプリケーションを実行して(できるだけ多くの機能を呼び出すようにしてください)、アクセスされたファイルとアクセスされなかったファイルを確認します。場合によっては、アプリケーションを実行する必要がある各プラットフォームでこれを繰り返す必要があるかもしれません。

0

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 
関連する問題