回答:
Eclipseはそれを実行できます。(一時的な)プロジェクトを作成し、ライブラリをプロジェクトのクラスパスに配置するだけです。その後、クラスを簡単に見つけることができます。
私の頭に浮かぶもう1つのツールは、Java Decompilerです。一度に多くのjarファイルを開くことができ、クラスの検索にも役立ちます。
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
-iff ERRORLEVEL
がゼロ以外の場合、Javaアーカイブファイル名を標準出力(コンソール)に書き込みます。少し前に、私はそのためのプログラムを書きました:https : //github.com/javalite/jar-explorer
grep -l "classname" *.jar
あなたに瓶の名前を与えます
find . -name "*.jar" -exec jar -t -f {} \; | grep "classname"
クラスのパッケージを提供します
#!/bin/bash
pattern=$1
shift
for jar in $(find $* -type f -name "*.jar")
do
match=`jar -tvf $jar | grep $pattern`
if [ ! -z "$match" ]
then
echo "Found in: $jar"
echo "$match"
fi
done
jar -tvf
ましたunzip -l
。
特定の文字列に一致するjarを見つけるには:
find . -name \*.jar -exec grep -l YOUR_CLASSNAME {} \;
この問題に遭遇したとき、私はそれを行うユーティリティを知りませんでしたので、次のように書きました:
public class Main {
/**
*
*/
private static String CLASS_FILE_TO_FIND =
"class.to.find.Here";
private static List<String> foundIn = new LinkedList<String>();
/**
* @param args the first argument is the path of the file to search in. The second may be the
* class file to find.
*/
public static void main(String[] args) {
if (!CLASS_FILE_TO_FIND.endsWith(".class")) {
CLASS_FILE_TO_FIND = CLASS_FILE_TO_FIND.replace('.', '/') + ".class";
}
File start = new File(args[0]);
if (args.length > 1) {
CLASS_FILE_TO_FIND = args[1];
}
search(start);
System.out.println("------RESULTS------");
for (String s : foundIn) {
System.out.println(s);
}
}
private static void search(File start) {
try {
final FileFilter filter = new FileFilter() {
public boolean accept(File pathname) {
return pathname.getName().endsWith(".jar") || pathname.isDirectory();
}
};
for (File f : start.listFiles(filter)) {
if (f.isDirectory()) {
search(f);
} else {
searchJar(f);
}
}
} catch (Exception e) {
System.err.println("Error at: " + start.getPath() + " " + e.getMessage());
}
}
private static void searchJar(File f) {
try {
System.out.println("Searching: " + f.getPath());
JarFile jar = new JarFile(f);
ZipEntry e = jar.getEntry(CLASS_FILE_TO_FIND);
if (e == null) {
e = jar.getJarEntry(CLASS_FILE_TO_FIND);
if (e != null) {
foundIn.add(f.getPath());
}
} else {
foundIn.add(f.getPath());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
また、JarScan(inetfeedback.com)とJarScan(java.net)の 2つの異なるユーティリティがあり、どちらも「JarScan」と呼ばれています。
user1207523のスクリプトは私には問題なく動作します。以下は、単純な展開の代わりにfindを使用してjarファイルを検索するバリアントです。
#!/bin/bash
for i in `find . -name '*.jar'`; do jar -tf "$i" | grep $1 | xargs -I{} echo -e "$i : {}" ; done
私は常にWindowsでこれを使用してきましたが、非常にうまくいきました。
findstr /s /m /c:"package/classname" *.jar, where
findstr.exeはWindowsとパラメータに標準で付属しています。
これが誰かを助けることを願っています。
bash script
を使用したソリューションunzip (zipinfo)
。でテスト済みUbuntu 12
。
#!/bin/bash
# ./jarwalker.sh "/a/Starting/Path" "aClassName"
IFS=$'\n'
jars=( $( find -P "$1" -type f -name "*.jar" ) )
for jar in ${jars[*]}
do
classes=( $( zipinfo -1 ${jar} | awk -F '/' '{print $NF}' | grep .class | awk -F '.' '{print $1}' ) )
if [ ${#classes[*]} -ge 0 ]; then
for class in ${classes[*]}
do
if [ ${class} == "$2" ]; then
echo "Found in ${jar}"
fi
done
fi
done
私はこの新しい方法を見つけました
bash $ ls -1 | xargs -i -t jar -tvf '{}'| grep Abstract
jar -tvf activation-1.1.jar
jar -tvf antisamy-1.4.3.jar
2263 Thu Jan 13 21:38:10 IST 2011 org/owasp/validator/html/scan/AbstractAntiSamyScanner.class
...
したがって、これはjarとクラスが見つかった場合にリストします。必要に応じて、ls -1 * .jarを指定するか、findコマンドHTH Someoneを使用してxargsに入力できます。
ClassFinderは、この問題を解決するように設計されたプログラムです。ディレクトリとjarファイルを再帰的に検索して、パターンに一致するクラスのすべてのインスタンスを見つけることができます。Pythonではなく、Javaで書かれています。使いやすいGUIを備えています。そして、それは速く走ります。このリリースは実行可能なjarでプリコンパイルされているため、ソースからビルドする必要はありません。
ここからダウンロード:ClassFinder 1.0
JBoss Tattletaleを確認してください。個人的には使用したことがありませんが、これが必要なツールのようです。
FindClassInJars utilを使用するだけです。これは単純なスイングプログラムですが、便利です。ソースコードを確認するか、jarファイルをhttp://code.google.com/p/find-class-in-jars/からダウンロードできます。
なぜここでスクリプトが実際に機能しなかったのかわかりません。これは機能します:
#!/bin/bash
for i in *.jar; do jar -tf "$i" | grep $1 | xargs -I{} echo -e "$i : {}" ; done
jarファイルを見つけるスクリプト:find_jar.sh
IFS=$(echo -en "\n\b") # Set the field separator newline
for f in `find ${1} -iname *.jar`; do
jar -tf ${f}| grep --color $2
if [ $? == 0 ]; then
echo -n "Match found: "
echo -e "${f}\n"
fi
done
unset IFS
使用法:./find_jar.sh <jarファイルを含むトップレベルのディレクトリ> <検索するクラス名>
これは、ここで示されているほとんどの回答と同様です。しかし、grepが何かを見つけた場合にのみ、ファイル名を出力します。grep出力を抑制したい場合は、/ dev / nullにリダイレクトできますが、部分的なクラス名を使用して、表示された出力のリストから正しいものを特定できるように、grepの出力も確認することを好みます。
クラス名は、「String」のような単純なクラス名でも、「java.lang.String」のような完全修飾名でもかまいません。
さらに別のツールを追加するには...これは、Windows用の非常にシンプルで便利なツールです。クリックする単純なexeファイル、検索するディレクトリ、クラス名を指定すると、そのクラスを含むjarファイルが見つかります。はい、それは再帰的です。
JARのフォルダー(およびサブフォルダー)の束でクラスを見つけるには:https : //jarscan.com/
Usage: java -jar jarscan.jar [-help | /?]
[-dir directory name]
[-zip]
[-showProgress]
<-files | -class | -package>
<search string 1> [search string 2]
[search string n]
Help:
-help or /? Displays this message.
-dir The directory to start searching
from default is "."
-zip Also search Zip files
-showProgress Show a running count of files read in
-files or -class Search for a file or Java class
contained in some library.
i.e. HttpServlet
-package Search for a Java package
contained in some library.
i.e. javax.servlet.http
search string The file or package to
search for.
i.e. see examples above
例:
java -jar jarscan.jar -dir C:\Folder\To\Search -showProgress -class GenericServlet
恥知らずな自己宣伝ですが、私が書いたユーティリティを試すことができます:http : //sourceforge.net/projects/zfind
最も一般的なアーカイブ/圧縮ファイル(jar、zip、tar、tar.gzなど)をサポートし、他の多くのjar / zipファインダーとは異なり、ネストされたzipファイル(zip内のzip、jar内のjarなど)を無制限の深さまでサポートします。
パーティーには少し遅れましたが、それでも...
私はJarBrowserを使用して、特定のクラスがどのjarに存在するかを見つけてきました。使いやすいGUIを備えているため、選択したパスにあるすべてのjarのコンテンツを参照できます。
次のスクリプトはあなたを助けるでしょう
for file in *.jar
do
# do something on "$file"
echo "$file"
/usr/local/jdk/bin/jar -tvf "$file" | grep '$CLASSNAME'
done
これはMinGW(windows bash環境)〜gitbashでうまく動作します
この関数をHOMEディレクトリの.bashrcファイルに入れます。
# this function helps you to find a jar file for the class
function find_jar_of_class() {
OLD_IFS=$IFS
IFS=$'\n'
jars=( $( find -type f -name "*.jar" ) )
for i in ${jars[*]} ; do
if [ ! -z "$(jar -tvf "$i" | grep -Hsi $1)" ] ; then
echo "$i"
fi
done
IFS=$OLD_IFS
}
あなたが探している仕事をすることができる日食のためにこのプラグインをチェックしてください。