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