私のアプリケーションは Java EE で構築されています。
このアプリケーションには約 50 個の jar があります。
特定のキーワードで検索することはできますか (実際にはキーワードで検索したいのですがBEGIN REQUEST
)?
Linux または OSX で zipgrep を使用できます。
zipgrep "BEGIN REQUEST" file.jar
多数の jar を検索する場合は、次のようにします。
find libdir -name "*.jar" -exec zipgrep "BEGIN REQUEST" '{}' \;
wherelibdir
は、すべての jar を含むディレクトリです。このコマンドは、サブディレクトリも再帰的に検索します。
Windows の場合、cygwin をダウンロードして、その下に zipgrep をインストールできます: http://www.cygwin.com/
編集 1
式が見つかったファイルの名前を表示するには、次のことができます。
find libdir -name "*.jar" | xargs -I{} sh -c 'echo searching in "{}"; zipgrep "BEGIN REQUEST" {}'
注意:これは正確な答えではありません。迅速なヒューリスティックなアプローチにすぎません。クラスの名前のようなもの (たとえば、どの jar にクラス Foo があるか?) またはメソッド名を見つける必要がある場合は、これが機能する可能性があります。
grep --text 'your string' your.jar
これにより、jar ファイルがテキストであるかのように検索されます。これはアーカイブを展開しないため高速ですが、精度が低いのもそのためです。網羅的である必要がある場合、これは使用すべきアプローチではありませんが、引き出す前に少し手早く何かを試したい場合、zipgrep
これは良いアプローチです。
からman grep
、
-a, --text Process a binary file as if it were text; this is equivalent to the --binary-files=text option.
jar 内の検索や、特定のテキストを含むクラス名の検索は、WinRar 検索を使用すると非常に簡単です。その効率的で、少なくとも私にとっては常に機能しました。
WinRarで任意のjarファイルを開き、検索を開始したい場所からトップフォルダー(サブフォルダーを含む)に到達するまで「..」をクリックします。
以下のオプションを確認してください。
1.) 「検索するファイル名」、「アーカイブの種類」フィールドに「*」を指定します
2.) [サブフォルダを検索]、[ファイルを検索]、[アーカイブを検索] のチェック ボックスをオンにします。
以下のコマンドは、結果をファイル名と jar ファイル名と共に表示します。
jar ファイルのリストで文字列を検索します。
find <%PATH of the Folder where you need to search%> -name "*.jar" -print -exec zipgrep "jar$|<%STRING THAT YOU NEED TO FIND>" '{}' \;
jar ファイルのリストでクラス名を検索します。
find . -name "*.jar" -print -exec jar tvf {} \; |grep -E "jar$|<%CLASS NAME THAT YOU NEED TO FIND>\.class"
jfind jar の使用
JFind は、ファイルシステムのどこにでも Java クラスファイルを見つけることができます。たとえそれが zip 内の耳の中の jar の奥深くに隠されていてもです!