URI 클래스에 대한 Java 계측 : 종속성을 추가하면 ClassNotFoundException이 발생 함

Dec 12 2020

생성 된 URI를 logshipper에 작성하기 위해 URI 생성자를 계측했습니다. Logshipper 클래스는 메이븐 종속성이자 런타임 Arg 인 에이전트 라이브러리의 일부입니다.

에이전트 내부의 계측은 ClassFileTransformer를 사용하여 해당 생성자에 코드 줄을 추가합니다. 그러나 생성자가 호출되면 detailMessage : edu / overbeck / masterarbeit / agent / LogShipper와 함께 ClassNotFoundException이 발생합니다. ClassLoader를 살펴보면 Class가로드됩니다. 내 IntelliJ 디버거의 스크린 샷 :! [이상한 오류] [1]

왜 이런 일이 발생합니까? Apache HTTP-core 라이브러리의 다른 계측 클래스 인 ContentLengthOutputStream은 LogShipper에서 잘 작동합니다. [1]:https://i.stack.imgur.com/vf8b4.png

답변

PeerOverbeck Dec 13 2020 at 05:34

이것은 클래스 로더 문제였습니다. 여기에서 잘 대답하고 설명했습니다. 계측 된 메서드에서 자체 클래스를 호출 할 때 Java NoClassDefFoundError XBootclasspath가 도움이되면서 LogShipper 클래스가 포함 된 AgentLib 추가.