2017-03-17 11 views
0

私は、javassistエージェントに存在するClassの1つを呼び出すライブラリメソッドを計測したいと考えています。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クラスローダーにロードされ、ライブラリークラスは別の場所にロードされます。したがって、私たちはエージェントを他のライブラリが存在する場所で利用できるようにする必要があります。JARパスをマニフェストファイルに追加すると、私たちがインストールするすべての場所でjarパスが利用可能になります。おそらくライブラリはブートストラップクラスローダーにロードされます。私は確信していません。 詳細については、上記のサイトを参照することができます..非常に精巧に –

関連する問題