Wie Sie herausfinden, welche Gläser wirklich verwendet?
Ich versuche die JAR-Bibliotheken, die aus insgesamt 83 Gläser, sind tatsächlich von einer Gruppe von 12 Java EE/Spring-Projekte. Alle Gläser befinden sich unter einem OHR. Die Entwicklung erfolgt in Eclipse und das build-tool Ant. Alle Projekte führen Sie auf dem WebSphere Application Server 6.0.
Diese Frage: Wie um herauszufinden, genutzt Gläser?
Punkte diese: Wie analysieren Sie die jar-Datei in ein Java-Programm?
empfiehlt die Anrufung des java
ausführbare Datei mit der -verbose:class
argument, aber wenn das nützlich ist hier, wie mache ich das in dem Fall, wo die Projekte laufen auf meinem lokalen WAR 6.0?
Diese Frage scheint mehr in die richtige Richtung: So finden Sie die Gläser und in welcher Reihenfolge geladen werden, die durch einen classloader?
Allerdings bin ich nicht vertraut mit, wie eine class-loader funktioniert, wie zu sagen, welche meiner Klasse loader-Instanz ist (eine Antwort zeigt an, dass URLClassLoader hat eine getURLs()
Methode, die den Zugriff auf eine Liste von jars/Verzeichnisse), und wenn meine Klasse die loader-Instanz ist nicht URLClassLoader, wohin gehe ich von hier?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schalten Sie die ausführliche laden von Klassen (wie vorgeschlagen von dims)
Blick auf die admin-Konsole, und Sie werden sehen, eine class-loader-viewer, zeigt, dass Sie die notwendigen Informationen.
Class loader hat eine standard-Hierarchie, die es verwendet, um das laden der Klassen.
Haben Sie einen Blick auf diese:
http://www-01.ibm.com/support/docview.wss?uid=swg27023549&aid=1
Dieser Präsentation geben Sie eine sehr gutes intro wie die Dinge funktionieren in der WebSphere-Umgebung.
HTH
Manglu
-verbose:dynload
scheint nicht zu funktionieren, WAR 6.0, aber ich bin mir nicht sicher, ob ich es wirklich brauchen.Für WebSphere 6.1, können Sie die "-verbose:dynload" - option (siehe Seite 52 des WebSphere Application Server V6.1: Classloader-Problem Bestimmung Redbook). Sehen Sie die Ausgabe in native_stderr.melden Sie
Could not create the Java virtual machine. [ JVMCI129: Unrecognized verbose option: -verbose:dynload ]
. Musste ich manuell Bearbeiten server.xml Datei entfernen Sie diese option, um zurück zu sein in der Lage, den server zu starten.Könnten Sie versuchen, mit so etwas wie http://www.jboss.org/tattletale. Dies kann Ihnen sagen, die Gläser sind nicht benutzt wird.
Generische Antwort auf diese Frage könnte knifflig sein. Als Java lädt Klassen dynamisch einige jars/Klassen könnten nicht geladen werden, es sei denn, alle Funktionen des Programms ausgeübt wird (denken Sie an Klasse.forName("foo") als triviales Beispiel). Daher ist jede Art der statischen Analyse der Abhängigkeiten könnten nicht 100% vollständiges Bild, die Sie haben könnten, zu analysieren, laufende Anwendung, wie es ausgeführt wird, vorzugsweise schlagen alle code-Zweige.
Als grobe erste Annäherung, um zu sehen, ob es gibt Gläser, die nicht eröffnet wird, Sie könnten versuchen, auf die Liste der geöffneten Dateien für webSphere Prozess, wie berichtet, von Ihrem OS ('lsof' unter Unix), wenn die Anwendung ausgeführt wird. Wenn jar ist nicht aufgelistet geöffnet, es ist ziemlich gutes Indiz dafür, dass es nicht geladen/benutzt, aber rückwärts nicht notwendig wahr, wie Websphere Scannen könnte-Gläser für Anmerkungen etc.