2009-04-17 8 views
9

最新のものを使用していましたが、古いバージョンのクラスが使用されています。アプリケーションサーバーのすべてのサブフォルダにあるすべてのJARファイルをスキャンするには、この特定のクラスが見つかったJARSファイルのファイル名を出力する小さなシェルスクリプトを作成するにはどうすればよいですか?JarScanは、特定のクラスのすべてのサブフォルダ内のすべてのJARファイルをスキャンします

答えて

16

何かのように:

find . -name '*.jar' | while read jarfile; do if jar tf "$jarfile" | grep org/jboss/Main; then echo "$jarfile"; fi; done 

あなたはこのようにそれを包むことができます。

jarscan() { 
    pattern=$(echo $1 | tr . /) 
    find . -name '*.jar' | while read jarfile; do if jar tf "$jarfile" | grep "$pattern"; then echo "$jarfile"; fi; done 
} 

をそしてjarscan org.jboss.Mainカレントディレクトリの下にあるすべてのJARファイルにそのクラスを検索します

+3

'jar'の代わりに 'unzip -l'を使用すると非常に高速に動作します。 'unzip -l'を実行すると 'jar'が72秒かかり4秒かかりました –

+0

私はここでこれを正確に言うために来ました。 +1 –

+0

特定のクラスがどのjarで見つかるか知りたいのであれば、私は通常cd〜/ .m2/repositoryのような処理を行います。 grep -r -H "classname" *。 – extraneon

1

ここでこの質問に答えるには、私たちのために単純なシェルコマンドを使用します。

for jarFile in $(
    ls -R | 
    awk ' 
     match($0, ".*:") { 
      folder=$0 
     } 
     ! match($0, ".*:") { 
      print folder$0 
     }' | 
     grep "\.jar" | 
     sed -e "s/:/\//g" 
); 
do 
    unzip -l $jarFile; 
done | 
awk ' 
    match($0, "Archive.*") { 
     jar=$0 
    } 
    ! match($0, "Archive.*") { 
     print jar" : "$0 
    }' | 
grep org.jboss.Main 
2

結果が必要な場合は、agentransack http://www.mythicsoft.com/agentransack/をインストールして、テキスト検索を行うことができます。 Agentransackは、jarファイルとzipファイルも検索します。

1

年前私はこのような問題を解決するためにユーティリティclassfindを書きました。 .jarセットを指すようにクラスパスを設定すると、classfindは特定のクラスを見つけることができるjarを教えてくれます。

example% classfind -c Document 
/usr/java/j2sdk1.4.0/jre/lib/rt.jar -> org.w3c.dom.Document 
/usr/java/j2sdk1.4.0/jre/lib/rt.jar -> javax.swing.text.Document 
4

は直接あなたの質問に答えていないが、多分これはあなたの問題を解決します:あなたは、特定のクラスがあなたのコードに簡単な行を追加することによってロードされた場所(例えばjarファイル)をプリントアウトすることができます

System.err.println(YourClass.class.getProtectionDomain().getCodeSource()); 

次に、どこから来たのかがわかります。

3

ツールは非常に便利です。

2つのパネルでGUIウィンドウを開きます。ディレクトリを選択すると、そのディレクトリ内のすべてのJARファイルがスキャンされ、特定のクラスを検索できます。下のパネルがスキャンされたすべてのJARファイル内のそのクラスのヒットのリストで点灯します。

+0

このツールの新しいURL:https://github.com/javalite/jar-explorer – ipolevoy

1

また、JavaツールJarScanもご覧ください。

クラス名とパッケージで検索できます。

Total Commanderが利用できず、Javaのみが実行可能な場合に役立ちます。

1
#! /bin/sh 

path=$1 
segment=$2 

if [ -z "$path" ] || [ -z "$segment" ] 
then 
    echo "Usage: $0 <path> <segment>" 
    exit 
fi 

for jar in $path/*.jar ; do echo " *** $jar *** " ; jar tf $jar| grep --color=always $segment; done; 
関連する問題