Ich konnte mit javap -c
und einem Regex-Filter scheinbar gute Ergebnisse erzielen.
Ich verwendete cygwin
, um meine Ergebnisse zu erhalten, aber Sie sollten in der Lage sein, dies in jeder Umgebung zu tun, alles, was Sie brauchen, ist ein Tool zum Entpacken, javap
und ein Werkzeug zum Ausführen von regulären Ausdrücken. In aktuellen Windows-Versionen würde powershell
diese Funktionen bereitstellen.
Der folgende Code wird die Klassen von jeder Klasse in einer JAR-Datei referenziert Liste:
mkdir workDir
unzip yourJar.jar -d workDir
shopt -s globstar
for classFile in **/*.class; do
echo "Classes used in $classFile :"
javap -c "$classFile" | grep -Eo "([a-zA-Z0-9]+/)+[A-Z][a-zA-Z0-9]*" | sort -u
echo
done
Sie sagten, Sie die Klassen in einer jar
Datei referenziert wollte, so dass Sie die einzelnen nicht vorausgesetzt wollen Klasse sollte diese Arbeit:
mkdir workDir
unzip yourJar.jar -d workDir
shopt -s globstar
for classFile in **/*.class; do
javap -c "$classFile" | grep -Eo "([a-zA-Z0-9]+/)+[A-Z][a-zA-Z0-9]*"
done | sort -u
Beachten Sie, dass diese Klassen verpassen, die Konventionen nicht folgen, zum Beispiel, die in dem Standard-Paket definiert sind, oder dessen Name nicht mit einem Großbuchstaben beginnen.
Sie werden auch Klassen abrufen, deren qualifizierter Name mit einer L
beginnt: Dies stellt Arrays dar, und Sie möchten vielleicht L löschen, wenn Sie nur an dem Klassennamen interessiert sind. Es gibt noch andere ähnliche Modifizierer für einzelne Buchstaben, an die ich mich nicht erinnern kann.
Ich denke, technisch könnte man das tun mit 'javap -v' oder' -c', aber erfordert ein JDK8 scheint wie die gesunde Option – Aaron
Werfen Sie einen Blick auf die Antworten im folgenden Thread https://StackOverflow.com/questions/4326407/analyze-jar-Abhängigkeiten-in-einem-Java-Projekt – SubOptimal
@Aaron Die Benutzer des Programms sind die Entwickler in unserer Firma, die Java 8 nicht verwendet. Ich kann nichts dagegen tun. –