Wie würden Sie einen bestimmten Klassennamen in vielen JAR-Dateien finden?
(Suchen Sie nach dem tatsächlichen Klassennamen, nicht nach den Klassen, die darauf verweisen.)
Wie würden Sie einen bestimmten Klassennamen in vielen JAR-Dateien finden?
(Suchen Sie nach dem tatsächlichen Klassennamen, nicht nach den Klassen, die darauf verweisen.)
Antworten:
Eclipse kann dies tun, indem Sie einfach ein (temporäres) Projekt erstellen und Ihre Bibliotheken in den Klassenpfad des Projekts einfügen. Dann können Sie die Klassen leicht finden.
Ein weiteres Tool, das mir in den Sinn kommt, ist Java Decompiler. Es kann viele Gläser gleichzeitig öffnen und hilft auch, Klassen zu finden.
quelle
Unix
Unter Linux verwenden andere Unix-Varianten, Git Bash unter Windows oder Cygwin die Befehle
jar
(oderunzip -v
)grep
undfind
.Im Folgenden werden alle Klassendateien aufgelistet, die einem bestimmten Namen entsprechen:
Wenn Sie die gesamte Liste der Java-Archive kennen, die Sie durchsuchen möchten, können Sie sie alle mithilfe (symbolischer) Links im selben Verzeichnis ablegen.
Oder verwenden Sie
find
(Groß- und Kleinschreibung beachten), um die JAR-Datei zu finden, die einen bestimmten Klassennamen enthält:So finden Sie beispielsweise den Namen des Archivs, das Folgendes enthält
IdentityHashingStrategy
:Wenn sich die JAR an einer beliebigen Stelle im System befinden könnte und der
locate
Befehl verfügbar ist:Eine Syntaxvariante:
Windows
Öffnen Sie eine Eingabeaufforderung , wechseln Sie in das Verzeichnis (oder Vorgängerverzeichnis), das die JAR-Dateien enthält, und gehen Sie dann wie folgt vor:
So funktioniert das:
for /R %G in (*.jar) do
- Schleife über alle JAR-Dateien und rekursives Durchlaufen von Verzeichnissen; Speichern Sie den Dateinamen in%G
.@jar -tvf "%G" |
- Führen Sie den Befehl Java Archive aus, um alle Dateinamen im angegebenen Archiv aufzulisten, und schreiben Sie die Ergebnisse in die Standardausgabe. Das@
Symbol unterdrückt das Drucken des Befehlsaufrufs.find "ClassName" > NUL
- Durchsuchen Sie die Standardeingabe, die von der Ausgabe des Befehls jar geleitet wird, nach dem angegebenen Klassennamen. Dies wirdERRORLEVEL
auf 1 gesetzt , wenn eine Übereinstimmung vorliegt (andernfalls 0).&& echo %G
- WennERRORLEVEL
ungleich Null ist, schreiben Sie den Namen der Java-Archivdatei in die Standardausgabe (die Konsole).Netz
Verwenden Sie eine Suchmaschine , die JAR-Dateien scannt .
quelle
Vor einiger Zeit habe ich ein Programm dafür geschrieben: https://github.com/javalite/jar-explorer
quelle
gibt Ihnen den Namen des Glases
gibt Ihnen das Paket der Klasse
quelle
quelle
jar -tvf
mitunzip -l
.So suchen Sie Gläser, die einer bestimmten Zeichenfolge entsprechen:
find . -name \*.jar -exec grep -l YOUR_CLASSNAME {} \;
quelle
Ich kannte kein Hilfsprogramm, als ich auf dieses Problem stieß, also schrieb ich Folgendes:
quelle
Es gibt auch zwei verschiedene Dienstprogramme namens "JarScan", die genau das tun, wonach Sie fragen: JarScan (inetfeedback.com) und JarScan (java.net)
quelle
Das Skript von user1207523 funktioniert gut für mich. Hier ist eine Variante, die wiederholt nach JAR-Dateien sucht, indem sie find anstelle einer einfachen Erweiterung verwendet.
quelle
Ich habe dies immer unter Windows verwendet und es hat außergewöhnlich gut funktioniert.
findstr.exe wird standardmäßig mit Windows und den folgenden Parametern geliefert:
Hoffe das hilft jemandem.
quelle
Eine
bash script
Lösung mitunzip (zipinfo)
. Getestet amUbuntu 12
.quelle
So durchsuchen Sie alle JAR-Dateien in einem bestimmten Verzeichnis nach einer bestimmten Klasse:
oder noch einfacher,
Die Ausgabe sieht folgendermaßen aus:
Es ist sehr schnell, da die Option -F die Suche nach einer festen Zeichenfolge bedeutet, sodass die Regex-Engine nicht für jeden Grep-Aufruf geladen wird. Bei Bedarf können Sie die Option -F jederzeit weglassen und reguläre Ausdrücke verwenden.
quelle
Ich habe diesen neuen Weg gefunden
Dies listet also das JAR und die Klasse auf, wenn sie gefunden werden. Wenn Sie möchten, können Sie ls -1 * .jar geben oder xargs mit dem Befehl find HTH Someone eingeben.
quelle
ClassFinder ist ein Programm, das dieses Problem lösen soll. Sie können rekursiv in Verzeichnissen und JAR-Dateien suchen, um alle Instanzen einer Klasse zu finden, die einem Muster entsprechen. Es ist in Java geschrieben, nicht in Python. Es hat eine schöne GUI, die es einfach zu bedienen macht. Und es läuft schnell. Diese Version ist in einem ausführbaren JAR vorkompiliert, sodass Sie sie nicht aus dem Quellcode erstellen müssen.
Laden Sie es hier herunter: ClassFinder 1.0
quelle
Überprüfen Sie JBoss Tattletale ; Obwohl ich es nie persönlich benutzt habe, scheint dies das Werkzeug zu sein, das Sie brauchen.
quelle
Verwenden Sie einfach FindClassInJars util, es ist ein einfaches Swing-Programm, aber nützlich. Sie können den Quellcode überprüfen oder die JAR-Datei unter http://code.google.com/p/find-class-in-jars/ herunterladen.
quelle
Ich bin mir nicht sicher, warum Skripte hier für mich nie wirklich funktioniert haben. Das funktioniert:
quelle
Skript zum Suchen der JAR-Datei: find_jar.sh
Verwendung: ./find_jar.sh <Verzeichnis der obersten Ebene mit JAR-Dateien> <Zu suchender Klassenname>
Dies ähnelt den meisten hier gegebenen Antworten. Der Dateiname wird jedoch nur ausgegeben, wenn grep etwas findet. Wenn Sie die grep-Ausgabe unterdrücken möchten, können Sie diese nach / dev / null umleiten, aber ich bevorzuge es, auch die Ausgabe von grep zu sehen, damit ich Teilklassennamen verwenden und die richtige aus einer Liste der angezeigten Ausgaben herausfinden kann.
Der Klassenname kann sowohl ein einfacher Klassenname wie "String" als auch ein vollständig qualifizierter Name wie "java.lang.String" sein.
quelle
Um noch ein weiteres Tool hinzuzufügen ... dies ist ein sehr einfaches und nützliches Tool für Windows. Eine einfache exe-Datei, auf die Sie klicken, geben Sie ihr ein Verzeichnis zum Suchen, einen Klassennamen und sie findet die JAR-Datei, die diese Klasse enthält. Ja, es ist rekursiv.
http://sourceforge.net/projects/jarfinder/
quelle
So finden Sie eine Klasse in einem Ordner (und in Unterordnern) mit JARs: https://jarscan.com/
Beispiel:
quelle
Sie finden eine Klasse in einem Verzeichnis voller Gläser mit etwas Shell:
Auf der Suche nach Klasse "FooBar":
quelle
Eine Sache, die Sie zu all dem hinzufügen sollten: Wenn Sie die ausführbare JAR-Datei nicht zur Verfügung haben (sie wird mit dem JDK, aber nicht mit der JRE geliefert), können Sie Unzip (oder WinZip oder was auch immer) verwenden, um dasselbe zu erreichen.
quelle
Schamlose Eigenwerbung, aber Sie können ein Dienstprogramm ausprobieren, das ich geschrieben habe: http://sourceforge.net/projects/zfind
Es unterstützt die gängigsten archivierten / komprimierten Dateien (jar, zip, tar, tar.gz usw.) und unterstützt im Gegensatz zu vielen anderen jar / zip-Findern verschachtelte zip-Dateien (zip in zip, jar in jar usw.) bis zur unbegrenzten Tiefe.
quelle
Ein bisschen spät zur Party, aber trotzdem ...
Ich habe JarBrowser verwendet, um herauszufinden, in welchem Glas eine bestimmte Klasse vorhanden ist. Es verfügt über eine benutzerfreundliche Benutzeroberfläche, mit der Sie den Inhalt aller Gläser im ausgewählten Pfad durchsuchen können.
quelle
Das folgende Skript hilft Ihnen dabei
quelle
Dieser funktioniert gut in MinGW (Windows Bash-Umgebung) ~ Gitbash
Fügen Sie diese Funktion in Ihre .bashrc-Datei in Ihrem HOME-Verzeichnis ein:
quelle
Grepj ist ein Befehlszeilenprogramm zum Suchen nach Klassen in JAR-Dateien. Ich bin der Autor des Dienstprogramms.
Sie können das Dienstprogramm wie ausführen
grepj package.Class my1.jar my2.war my3.ear
Es können mehrere Glas-, Ohr- und Kriegsdateien bereitgestellt werden. Für die erweiterte Verwendung verwenden Sie find, um eine Liste der zu durchsuchenden Gläser bereitzustellen.
quelle
Überprüfen Sie dieses Plugin auf Eclipse, das die Arbeit erledigen kann, die Sie suchen.
https://marketplace.eclipse.org/content/jarchiveexplorer
quelle
In einer Linux-Umgebung können Sie Folgendes tun:
Dabei ist name der Name der Klassendatei, die Sie in den Jars suchen, die über die Hierarchie der Verzeichnisse verteilt sind, die im base_dir verwurzelt sind .
quelle
Sie können verwenden
locate
undgrep
:Stellen Sie sicher, dass Sie
updatedb
vor der Verwendung ausführenlocate
.quelle