Java Instrumentation für URI-Klasse: Durch Hinzufügen einer Abhängigkeit wird ClassNotFoundException ausgelöst

Dec 12 2020

Ich habe einen URI-Konstruktor instrumentiert, um den erstellten URI in einen Logshipper zu schreiben. Die Logshipper-Klasse ist Teil meiner Agentenbibliothek, die sowohl eine Maven-Abhängigkeit als auch ein Laufzeit-Arg ist.

Die Instrumentierung im Agenten verwendet einen ClassFileTransformer, um diesem Konstruktor die Codezeile hinzuzufügen. Wenn der Konstruktor aufgerufen wird, löst er jedoch eine ClassNotFoundException mit detailMessage aus: edu / overbeck / masterarbeit / agent / LogShipper. Wenn ich mir den ClassLoader anschaue, wird die Klasse jedoch geladen. Ein Screenshot meines IntelliJ-Debuggers :! [Weird err] [1]

Warum passiert das? Meine andere instrumentierte Klasse, ContentLengthOutputStream aus der Apache HTTP-Core-Bibliothek, funktioniert gut mit dem LogShipper. [1]:https://i.stack.imgur.com/vf8b4.png

Antworten

PeerOverbeck Dec 13 2020 at 05:34

Es war ein Problem mit dem Klassenladeprogramm, das hier gut beantwortet und erklärt wurde: Java NoClassDefFoundError beim Aufrufen der eigenen Klasse über die instrumentierte Methode Das Hinzufügen meiner AgentLib mit der LogShipper-Klasse als XBootclasspath half.