Instrumentation Java pour la classe URI: l'ajout d'une dépendance lève une exception ClassNotFoundException

Dec 12 2020

J'ai instrumenté un constructeur d'URI pour écrire l'URI créé dans un logshipper. La classe Logshipper fait partie de ma bibliothèque d'agents qui est à la fois une dépendance maven et un Arg d'exécution.

L'instrumentation à l'intérieur de l'agent utilise un ClassFileTransformer pour ajouter la ligne de code à ce constructeur. Cependant, lorsque le constructeur est appelé, il lève une exception ClassNotFoundException avec detailMessage: edu / overbeck / masterarbeit / agent / LogShipper. Quand je regarde dans le ClassLoader, la classe est cependant chargée. Une capture d'écran de mon débogueur IntelliJ:! [Weird err] [1]

Pourquoi cela arrive-t-il? Mon autre classe instrumentée, ContentLengthOutputStream de la bibliothèque Apache HTTP-core, fonctionne très bien avec LogShipper. [1]:https://i.stack.imgur.com/vf8b4.png

Réponses

PeerOverbeck Dec 13 2020 at 05:34

C'était un problème de chargeur de classe - répondu et bien expliqué ici: Java NoClassDefFoundError lors de l'appel de sa propre classe à partir d'une méthode instrumentée L'ajout de mon AgentLib contenant la classe LogShipper comme XBootclasspath a aidé.