Frage

Ich mag die Methoden der Klassendateien in dem Glas des javap Werkzeug zur Liste. Wie mache ich es so, dass es die Methoden und Mitglieder aller Klassendateien in dem Glas auflistet. Im Moment bin ich in der Lage es zu einer Zeit für nur eine Klasse zu tun.

Ich erwarte etwas wie wenn ich sage,

javap java.lang.*

Es sollte die Methoden und Mitglieder aller Klassen in java.lang-Paket gewinnen. Wenn javap nicht in der Lage das heißt, gibt es solche Tools zur Verfügung?

War es hilfreich?

Lösung

#!/bin/bash
# Set the JAR name
jar=<JAR NAME>
# Loop through the classes (everything ending in .class)
for class in $(jar -tf $jar | grep '.class'); do 
    # Replace /'s with .'s
    class=${class//\//.};
    # javap
    javap -classpath $jar ${class//.class/}; 
done

Andere Tipps

Noch einfacher wäre

JAR=<path to jarfile> \
javap -classpath $JAR $(jar -tf $JAR | grep "class$" | sed s/\.class$//)

Zuerst die JAR-Datei entpacken, wird dies eine Reihe von Verzeichnissen für jedes Paket ergibt, dann pro Verzeichnis den javap Befehl anzuwenden.

So zum Beispiel mit Kater können Sie die catalina-balancer.jar Datei in webapps \ Balancer entpacken und dann mit

javap -classpath org\apache\webapp\balancer Rule

das gibt

Compiled from "Rule.java"
interface org.apache.webapp.balancer.Rule{
    public abstract boolean matches(javax.servlet.http.HttpServletRequest);
    public abstract java.lang.String getRedirectUrl();
}

Wenn Sie müssen dies tun, für alle Klassendateien in einem Paket benötigen Sie ein Skript oder Programm zu schreiben, das Classpath zu gehen und die .class aus den Dateinamen abzustreifen und es javap passieren.

(Es wäre ziemlich einfach in Perl / bash / java zu schreiben).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top