3

Ich versuche, ein einfaches Java-Agent-Programm zu erstellen, bevor ich die echte Sache implementieren. Ich kann es nicht zum Laufen bringen. Offensichtlich habe ich irgendeine Art von Konfiguration oder Klassenpfadproblem. Keine Menge des Suchens und Versuchens hat mir das Problem verursacht.Kann nicht -Javaagent ohne Fehler ausführen

Wenn ich laufen:

java -cp ./demoAgent.jar -javaagent:./demoAgent.jar com.kingtigerbooks.demoMod.Main

bekomme ich folgende Fehlermeldung:

Exception in thread "main" java.lang.ClassNotFoundException: com.kingtigerbooks.demoAgent.Agent 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:280) 
    at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:338) 
FATAL ERROR in native method: processing of -javaagent failed 
Abort trap 

ich diese auf meinem Mac laufen lasse. Die JAR-Datei mit dem Agenten befindet sich im aktuellen Verzeichnis. Das Manifest für die JAR-Datei sieht wie folgt aus:

Manifest-Version: 1.0 
Premain-class: com.kingtigerbooks.demoAgent.Agent 
Can-Redefine-Classes: true 

Wenn Gerüche wie ein Klassenpfad Problem, aber wie man sehen kann ich das Glas auf den Klassenpfad aufgenommen haben. Jede Hilfe wäre willkommen. Es ist ein sehr einfaches Projekt.

+0

Etwas ist hier eindeutig merkwürdig. Ich habe mehr oder weniger dasselbe auf Ubuntu gemacht und es hat funktioniert. Ich sehe nicht, was anders ist. Idealerweise möchte ich Hinweise zum Debuggen dieser Art von Problemen geben. – DungeonTiger

+0

Ich habe diesen Fehler bei der Kompilierung meines Projekts mit jdk1.8, als ich 1.7 hätte verwenden sollen ... – djangofan

Antwort

2

Wenn Sie einen Agenten ausführen, tun Sie nicht Fügen Sie den Agenten-Jar dem normalen Klassenpfad hinzu.

Als eine Randnotiz können Sie -verbose:class der Befehlszeile hinzufügen, um Informationen über den Klassenladeprozess zu erhalten.

+0

Leider führte dies zum selben Fehler. Die Kommandozeile war java-javaagent: ./ demoAgent.jar com.kingtigerbooks.demoMod.Main – DungeonTiger

+0

@DungeonTiger - haben Sie die Main-Klasse irgendwo in Ihrem Klassenpfad? – jtahlborn

+0

Hummm .... Ich würde ja sagen, wenn ich die Option -javaagent entferne, läuft es und ich bekomme meine schöne Hello World-Ausgabe. Ja. Das sagt mir, dass dieser Teil korrekt ist. Außerdem beschwert es sich nicht über die Main-Klasse, die sich über die Agent-Klasse beklagt, die sich im jar, demoAgent.jar, befindet. – DungeonTiger

4

Problem gelöst. Ich hatte eine schlechte JAR-Datei. Die Agent-JAR-Datei enthielt die Agentenklasse nicht. Wenn Sie die richtige JAR-Datei erstellen und den vollqualifizierten Pfad zum JAR-Objekt im javaagent-Parameter aktivieren, funktioniert alles.