2017-03-17 8 views
0

Ich möchte eine Bibliotheksmethode instrumentieren, um eine Klasse meiner Klasse im Javassist-Agenten aufzurufen.Javassist java.lang.NoClassDefFoundError

Können sagen, ich habe eine Klasse:

Class A { 

    void display() { 
     System.out.println("Inside A.dipslay()"); 
    } 
} 

dann, wenn ich rufe:

method.insertAfter("packageName.A.display()"); 

es die Ausnahme auslöst:

Exception in thread "main" java.lang.NoClassDefFoundError: packageName/A 
    at java.net.HttpURLConnection.setRequestMethod(libraryClass) 
    at sun.net.www.protocol.http.HttpURLConnection.setRequestMethod(libraryClass) 
    at com.avekshaa.app.SecurityFilter.sendGet(Class where i call the Library Class) 
    at com.avekshaa.app.SecurityFilter.main(Class where i call the Library Class) 

Und wenn ich es nenne nur nach Name :

method.insertAfter("A.display()"); 

dann gibt es eine Nein solche Klasse gefunden Ausnahme.

+0

löste ich das Problem, indem die in der Manifest-Datei Gläser Pfad Hinzufügen –

Antwort

1

Ich löste das Problem, indem ich den jars-Pfad in der javascript-Manifest-Datei hinzufügte. Reffer - this

+0

Können Sie bitte auf erarbeiten, wie dieses Problem zu lösen? – Ori

+0

Ja. Tatsächlich wird die Agentenklasse in den Systemklassenlader geladen, und Bibliotheksklassen werden an einem anderen Ort geladen. Also müssen wir unsere Agenten an dem Ort verfügbar machen, wo andere Bibliotheken vorhanden sind. Sobald wir unseren jar Pfad in der Manifest Datei hinzugefügt haben, wird er an jedem Ort verfügbar sein, an dem wir instrumentieren werden. Wahrscheinlich werden die Bibliotheken im Bootstrap Classloader geladen Ich bin mir nicht sicher. Sie können auf die oben erwähnte Website für weitere Details verweisen .. Es ist sehr gut ausgearbeitet –

Verwandte Themen