数十個の JAR ファイル内のどこかにクラスが見つかりましたか? 質問する

数十個の JAR ファイル内のどこかにクラスが見つかりましたか? 質問する

多数の jar ファイル内で特定のクラス名を見つけるにはどうすればよいでしょうか?

(クラス名を参照するクラスではなく、実際のクラス名を検索します。)

ベストアンサー1

ユニックス

Linux、その他の Unix バリアント、Windows 上の Git Bash、または Cygwin では、jar(またはunzip -v)、、grepおよびfindコマンドを使用します。

以下に、指定された名前に一致するすべてのクラス ファイルを一覧表示します。

for i in *.jar; do jar -tvf "$i" | grep -Hsi ClassName && echo "$i"; done

検索する Java アーカイブのリスト全体がわかっている場合は、(シンボリック) リンクを使用してそれらをすべて同じディレクトリに配置できます。

または、find(大文字と小文字を区別して) を使用して、指定されたクラス名を含む JAR ファイルを検索します。

find path/to/libs -name '*.jar' -exec grep -Hls ClassName {} \;

たとえば、以下を含むアーカイブの名前を検索するには、次のようになりますIdentityHashingStrategy

$ find . -name '*.jar' -exec grep -Hsli IdentityHashingStrategy {} \;
./trove-3.0.3.jar

JARがシステム内のどこにあっても、locateコマンドが利用可能です:

for i in $(locate "*.jar");
  do echo "$i"; jar -tvf "$i" | grep -Hsi ClassName;
done

構文のバリエーション:

find path/to/libs -name '*.jar' -print | \
  while read i; do jar -tvf "$i" | grep -Hsi ClassName && echo "$i"; done 

ウィンドウズ

開くコマンド・プロンプトJAR ファイルを含むディレクトリ (または祖先ディレクトリ) に移動して、次の操作を実行します。

for /R %G in (*.jar) do @jar -tvf "%G" | find "ClassName" > NUL && echo %G

仕組みは次のとおりです:

  1. for /R %G in (*.jar) do- すべての JAR ファイルをループし、ディレクトリを再帰的に走査し、ファイル名を に保存します%G
  2. @jar -tvf "%G" |- Java Archive コマンドを実行して、指定されたアーカイブ内のすべてのファイル名を一覧表示し、結果を標準出力に書き込みます。シンボル@は、コマンドの呼び出しの出力を抑制します。
  3. find "ClassName" > NUL- jar コマンドの出力からパイプされた標準入力で、指定されたクラス名を検索します。ERRORLEVEL一致する場合は 1 に設定されます (それ以外の場合は 0)。
  4. && echo %G- がERRORLEVELゼロ以外の場合、Java アーカイブ ファイル名を標準出力 (コンソール) に書き込みます。

ウェブ

使う検索エンジンJAR ファイルをスキャンします。

おすすめ記事