wie Sie angeben, class-path für java agent
Ich bin schreiben Sie ein Java-Agent instrument einer Ziel-Methode der Ziel-Klasse.
Ich den javassist-Bibliothek zu tun-instrument.
Also die java-agent (lassen Namen CnAgent.class) muss seine Abhängigkeit : javassist-Bibliothek zu laufen.
Die directory-Hierarchie ist :
.
├── META-INF
│ └── MANIFEST.MF
├── com
│ └── yet
│ └── another
│ └── test
│ └── agent
│ ├── CnAgent.class
│ └── CnTransformer.class
└── lib
└── javassist-3.18.2-GA.jar
und das MANIFEST.MF-Datei Inhalt :
Manifest-Version: 1.0
Class-Path: lib/javassist-3.18.2-GA.jar .
Agent-Class: com.yet.another.test.agent.CnAgent
Created-By: 1.8.0_11 (Oracle Corporation)
Can-Retransform-Classes: true
Ich erstelle jar-ball, indem Sie folgenden Befehl ein:
jar cvfm CnAgent.jar META-INF/MENIFIEST.MF . lib
wenn ich laden Sie die Agenten mit dem Attach-API JVM.
der Fehler prints :
error when transform : javassist/ClassPool
java.lang.NoClassDefFoundError: javassist/ClassPool
was bedeutet, dass der javassist-Bibliothek kann nicht gefunden werden durch den agent code.
Also meine Frage ist :
-
Festlegen-Agent-library-Klasse Weg lassen, finde es Abhängigkeiten?
-
Warum die Klasse option-Path im MANIFEST.MF nicht funktioniert , tut es nur für die jar direkt lief in die Kommandozeile ?
Dank deiner Weisheit 🙂
- Versuchen Sie es mit
Boot-Class-Path
stattClass-Path
(ohne den Punkt.
). - WARNUNG: javassist-3.18.2-GA.jar nicht Hinzugefügt bootstrap-class-loader-Suche: ungültiges argument oder keine JAR-Datei
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die option -Xbootclasspath: (setzt den Pfad) oder -Xbootclasspath/a: (fügt den angegebenen Pfad zum vorhandenen boot class path) (siehe doc von oracle). Aber, wie beschrieben in dem link, es ist non-standard.
Als alternative, können Sie kopieren die fehlenden jar-Datei im Verzeichnis %JAVA_HOME%/jre/lib/ext-Verzeichnis.
Pro Guido Kommentar oben, sollten Sie
Boot-Class-Path
Ihren AgentenMANIFEST.MF
.Sehen diese
java.lang.instrumentation
docs (Manifest Attribute Abschnitt)In meinem Fall habe ich das in der Ameise build.xml:
dann kopieren Sie den guice und Guave jars in das Verzeichnis ich den Befehl ausführen, z.B. aus
java -verbose:class -javaagent:poa.jar -jar ExampleProject.jar > loaded.txt
Dieser listet auch alle Klassen geladen, um Ihnen zu erlauben, zu Debuggen, was Java-class-loader ist tatsächlich tun.
Weder die option aus whiskeyspider arbeitete für meinen Fall.