답변:
Eclipse는 그것을 할 수 있습니다. (임시) 프로젝트를 만들고 라이브러리를 프로젝트 클래스 경로에 넣으십시오. 그러면 수업을 쉽게 찾을 수 있습니다.
내 마음에 오는 또 다른 도구는 Java Decompiler입니다. 한 번에 많은 항아리를 열 수 있으며 수업을 찾는 데 도움이됩니다.
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
일치하는 경우 (그렇지 않으면 0) 1로 설정 됩니다.&& echo %G
-iff ERRORLEVEL
가 0이 아닌 경우 Java 아카이브 파일 이름을 표준 출력 (콘솔)에 씁니다.얼마 전에, 나는 그것을 위해 프로그램을 썼습니다 : https://github.com/javalite/jar-explorer
grep -l "classname" *.jar
항아리의 이름을 알려줍니다
find . -name "*.jar" -exec jar -t -f {} \; | grep "classname"
수업의 패키지를 제공합니다
주어진 문자열과 일치하는 항아리를 찾으려면
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) 과 같이 정확하게 요청하는 두 가지 유틸리티 인 "JarScan"도 있습니다.
user1207523의 스크립트가 제대로 작동합니다. 다음은 간단한 확장 대신 find를 사용하여 jar 파일을 검색하여 검색하는 변형입니다.
#!/bin/bash
for i in `find . -name '*.jar'`; do jar -tf "$i" | grep $1 | xargs -I{} echo -e "$i : {}" ; done
를 사용하는 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 및 클래스가 발견되면 find 명령 HTH Someone을 사용하여 ls -1 * .jar 또는 xargs에 입력을 제공 할 수 있습니다.
ClassFinder는이 문제를 해결하도록 설계된 프로그램입니다. 디렉토리와 jar 파일을 통해 재귀 적으로 검색하여 패턴과 일치하는 클래스의 모든 인스턴스를 찾을 수 있습니다. 파이썬이 아닌 자바로 작성되었습니다. 사용하기 쉬운 멋진 GUI가 있습니다. 그리고 그것은 빨리 달린다. 이 릴리스는 실행 가능한 jar로 사전 컴파일되므로 소스에서 빌드 할 필요가 없습니다.
여기에서 다운로드하십시오 : ClassFinder 1.0
JBoss Tattletale을 확인하십시오 . 개인적으로 사용한 적이 없지만 이것이 필요한 도구 인 것 같습니다.
FindClassInJars 유틸리티를 사용하면 간단한 스윙 프로그램이지만 유용합니다. http://code.google.com/p/find-class-in-jars/ 에서 소스 코드를 확인하거나 jar 파일을 다운로드 할 수 있습니다 .
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 파일을 찾을 수 있습니다. 예, 재귀입니다.
폴더 및 하위 폴더 묶음에서 클래스를 찾으려면 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를 사용하기 쉽습니다.
이것은 MinGW (windows bash environment) ~ 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
}
찾고있는 작업을 수행 할 수있는 이클립스 플러그인을 확인하십시오.
당신은 사용할 수 있습니다 locate
및 grep
:
locate jar | xargs grep 'my.class'
updatedb
를 사용하기 전에 실행해야합니다 locate
.