Frage

Ich habe eine Drittanbieter-Jar-Datei, die nur für einen Teil der API mit dem javadocs kommt. Gibt es eine Möglichkeit zu umkehren die JAR-Datei Ingenieur eine vollständige Liste von Klassen und Methoden zu erhalten?

War es hilfreich?

Lösung

jar tf wird die Inhaltsliste für Sie. javap mehr Details zu sehen, ermöglicht die Klassen (siehe Werkzeuge Führer).

Wenn Sie zum Beispiel eine Klasse namens mypkg.HelloWorld in einem Glas myjar.jar haben, dann führen Sie es wie

javap -classpath myjar.jar mypkg.HelloWorld

Sie sind jedoch sicher, dass Sie mit diesem nicht veröffentlichten APIs sein? Es ist normalerweise eine sehr schlechte Idee.

Andere Tipps

Wie Scott sagte, können Sie Eclipse eine Menge zu bekommen, was Sie suchen.

Ich würde empfehlen, die JadClipse Plugin bekommen, welche die .class-Dateien dekompilieren on the fly und zeigen Ihnen aktuellen Java-Code, wie Sie die Klassen in den IDE zu sehen.

Wenn Sie Eclipse verwenden, können Sie es nur in dem Klassenpfad des Projektes und erforschen es mit der Treeview und / oder Inhalte unterstützen.

würde ich andere IDEs annehmen kann, ähnlich tun.

Von einer Befehlszeile Sicht, können Sie unjar es (jar xf foo.jar) und verwenden javap gegen alle Dateien.

Sie können mit der Bibliothek WALA alle Methoden Signaturen auszulesen. Sie werden jedoch müssen zunächst Stub-Codes für Java laden. Das folgende Programm soll alle Unterschriften auslesen:

import com.ibm.wala.ipa.cha.ClassHierarchy; 
import com.ibm.wala.ipa.cha.IClassHierarchy; 
import com.ibm.wala.classLoader.IClass; 
import com.ibm.wala.classLoader.IMethod; 
import com.ibm.wala.ipa.callgraph.AnalysisOptions; 
import com.ibm.wala.ipa.callgraph.AnalysisScope; 
import com.ibm.wala.types.ClassLoaderReference; 
import java.util.jar.JarFile; 
import java.io.IOException; 
import com.ibm.wala.ipa.cha.ClassHierarchyException; 

public class methods { 
    public static void main(String[] args) throws IOException, ClassHierarchyException { 
        AnalysisScope scope = AnalysisScope.createJavaAnalysisScope(); 
        scope.addToScope(ClassLoaderReference.Primordial, new JarFile("jSDG-stubs-jre1.5.jar")); 
        scope.addToScope(ClassLoaderReference.Application, new JarFile("myProgram.jar")); 
        IClassHierarchy cha = ClassHierarchy.make(scope); 

        for (IClass cl : cha) { 
            if (cl.getClassLoader().getReference().equals(ClassLoaderReference.Application)) { 
                for (IMethod m : cl.getAllMethods()) { 
                    String ac = ""; 
                    if (m.isAbstract()) ac = ac + "abstract "; 
                    if (m.isClinit()) ac = ac + "clinit "; 
                    if (m.isFinal()) ac = ac + "final ";  
                    if (m.isInit()) ac = ac + "init ";  
                    if (m.isNative()) ac = ac + "native ";  
                    if (m.isPrivate()) ac = ac + "private "; 
                    if (m.isProtected()) ac = ac + "protected ";  
                    if (m.isPublic()) ac = ac + "public ";  
                    if (m.isSynchronized()) ac = ac + "synchronized ";  
                    System.out.println(ac + m.getSignature()); 
                } 
            } 
        } 
    } 
} 

Wenn Sie die angepasste WALA-Version von hier es tut Dalvik (zB Android Apps) als auch.

  • Eklipse würde große Arbeit

  • Java Decompiler würde die Klassen in einige übersetzen zurück semblence des Quellcodes, die Sie über die Klassen studieren konnte zu lernen, die Methoden, ihre Unterschrift, und vielleicht sogar einen Einblick in gültige Werte für einige Argumente (zB keine Null für dieses Argument übergeben oder es eine Nullpointer sofort auslösen ). Aber die Ärmel hochkrempeln das Glas unjar und die Decompiler gegen alle Klassendateien auszuführen. Dies ist im Wesentlichen, was Eclipse für Hilfetext mit undokumentierte-Klassen zu tun.

  • Schließlich, natürlich, ein "echte Programmierer" würde die Byte-Code direkt ohne Notwendigkeit für einen Decompiler.

eine schnelle Hilfe für Methoden einer normalen Klasse (nicht abstrakte Klasse) zu wissen, mich nach dem.

new Klassenname (). Drücken Sie Strg + Raum für Methoden in Eclipse auflistet.

Verwenden von Eclipse> Paket-Explorer die Klassen und thier Hierarchie zu sehen.

Inhaltshilfe (Auto-Vervollständigen-Funktion (Strg + Leertaste)) ist auch eine gute Hilfe, aber würde nicht empfehlen, eine nicht veröffentlichte API

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