Wo auf dem Dateisystem war mein Java-Klasse geladen?
Ich denke, das ist eine situation, die jeder Java-Programmierer läuft in, wenn Sie tun es lange genug. Sie machen einige debugging und eine änderung an der Klasse. Wenn Sie gehen, um führen Sie das Programm erneut, werden diese änderungen scheinen nicht abgeholt werden, sondern die alte Klasse immer noch scheint zu laufen. Sie reinigen und neu erstellen alles, gleiche Problem. Manchmal kann dieses nach unten kommen, um einen classpath-Problem, in der gleichen Klasse auf dem Klassenpfad mehr als einmal, aber es scheint nicht, eine einfache Möglichkeit, um herauszufinden, wo die Klasse geladen wird, kommt aus...
Gibt es eine Möglichkeit zu finden, den Pfad der Datei für die Klasse, die geladen wurde? Bevorzugt etwas, das würde funktionieren, wenn die Klasse geladen wurde, aus einer .class
- Datei oder eine .jar
- Datei. Irgendwelche Ideen?
- Dies ist fast die gleiche wie die folgende Frage, die etwas unterschiedliche Antworten: stackoverflow.com/questions/947182/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfach laufen
java
unter Verwendung der standard-Befehlszeilenoption"-verbose:class
" (siehe diejava
- Dokumentation). Dies wird drucken Sie jedes mal, wenn eine Klasse geladen wird und sagen Ihnen, wo es geladen.Wenn Sie es machen wollten programmgesteuert aus der Anwendung heraus, versuchen:
(Beachten Sie, getCodeSource() kann null zurückgeben, also nicht tatsächlich tun dies alles in eine Zeile 🙂 )
Nur kleben Sie diese irgendwo, und übergeben Sie das Class-Objekt für die Klasse, die Sie möchten, finden Sie die definition. Es sollte funktionieren, unabhängig davon, wo es genannt wird, denn es ruft getResource() auf der Klasse gesucht wird.
Beispiel-Ausgabe:
jar:file:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/classes.jar!/java/lang/String.class
Als die Klasse muss von irgendwo in die Klasse Pfad würde ich empfehlen, um einfach drucken Sie die Klasse Pfad und überprüfen Sie, ob es eine ältere version von dir Klasse irgendwo.