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 :

  1. Festlegen-Agent-library-Klasse Weg lassen, finde es Abhängigkeiten?

  2. 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 statt Class-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
InformationsquelleAutor Chinaxing | 2014-10-09
Schreibe einen Kommentar