2017-03-17 3 views
0

javassist 에이전트에있는 My Class 중 하나를 호출하는 라이브러리 메소드를 계측하려고합니다. 내가 호출 할 때 다음Javassist java.lang.NoClassDefFoundError

Class A { 

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

: 그것은 예외가 발생

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

:

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) 

을 그리고 이름으로 그냥 호출 할 때

내가 클래스가 있다고 가정하자 :

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

그런 다음 예외 클래스를 찾을 수 없습니다.

+0

매니페스트 파일에 jars 경로를 추가하여 문제를 해결했습니다. –

답변

1

javassist 매니페스트 파일에 jars 경로를 추가하여 문제를 해결했습니다. Reffer - this

+0

이 문제를 해결하는 방법을 자세히 설명해 주시겠습니까? – Ori

+0

예. 실제로 에이전트 클래스는 System 클래스 로더에로드되고 라이브러리 클래스는 다른 위치에로드됩니다. 따라서 우리는 다른 라이브러리가있는 위치에서 에이전트를 사용할 수 있도록해야합니다. 일단 manifest 파일에 jar 경로를 추가하면 우리가 사용할 모든 위치에서 사용할 수 있습니다. 대부분의 라이브러리는 부트 스트랩 클래스 로더에로드됩니다. 나는 잘 모르겠다. 자세한 내용은 위에서 언급 한 사이트를 참조하십시오. 매우 정교하게 작성되었습니다. –