Instrumentação Java para classe URI: adicionar uma dependência lança ClassNotFoundException

Dec 12 2020

Eu instrumentei um construtor de URI para gravar o URI criado em um logshipper. A classe Logshipper faz parte da minha biblioteca do agente, que é uma dependência maven e um Arg de tempo de execução.

A Instrumentação dentro do Agente usa um ClassFileTransformer para adicionar a linha de código a esse construtor. No entanto, quando o construtor é chamado, ele lança uma ClassNotFoundException com detailMessage: edu / overbeck / masterarbeit / agent / LogShipper. Quando eu dou uma olhada no ClassLoader, a classe está carregada. Uma captura de tela do meu depurador IntelliJ:! [Errado estranho] [1]

Por que isso acontece? Minha outra classe instrumentada, ContentLengthOutputStream da biblioteca Apache HTTP-core, funciona bem com o LogShipper. [1]:https://i.stack.imgur.com/vf8b4.png

Respostas

PeerOverbeck Dec 13 2020 at 05:34

Era um problema do carregador de classes - respondido e explicado bem aqui: Java NoClassDefFoundError ao chamar a própria classe a partir do método instrumentado Adicionar meu AgentLib contendo a classe LogShipper como XBootclasspath ajudou.