我有與下面的方法在飛行類加載與罐子
@Override
public Class<?> findClass(String className) throws ClassNotFoundException {
try {
/**
* Get a bytecode from file
*/
byte b[] = fetchClassFromFS(pathtobin + File.separator
+ className.replaceAll("\\.", escapeSeparator(File.separator)) + ".class");
return defineClass(className, b, 0, b.length);
} catch (FileNotFoundException ex) {
return super.findClass(className);
} catch (IOException ex) {
return super.findClass(className);
}
}
這就像你看到的擴展類一個ClassLoader的defineClass使用()方法從其父 - 類加載器。問題是當我試圖執行一個類'(我收到我的ClassLoader擴展 - 讓它是ru.xmppTesting.test.Disco)方法getMethods(),同時得到這個類的實例我得到以下
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/Header
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetPublicMethods(Unknown Source)
at java.lang.Class.getMethods(Unknown Source)
at DOTGraphCreator.createGraphFromClasses(DOTGraphCreator.java:85)
at DOTGraphCreator.generateDotGraphFile(DOTGraphCreator.java:56)
at DOTGraphCreator.main(DOTGraphCreator.java:46)
Caused by: java.lang.ClassNotFoundException: org.apache.http.Header
at java.lang.ClassLoader.findClass(Unknown Source)
at SourceClassLoader.findClass(SourceClassLoader.java:27)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 7 more
據我可以看到,這是因爲類org.apache.http.Header找不到定義。因爲它不是。
所以這裏有一個問題:
怎麼能和我必須定義和(從我的.jar庫以及其他豐富內容)與ru.xmppTesting.test.Disco的定義及其他類似沿着鏈接此頭類讓他們在飛行中定義?
這就是我應該馬上。但是我的目標是製作一個簡單的應用程序,用於加載選定的類(用於註釋和方法解析目的),並且不需要知道該類包含哪些內容以及導入的內容和它的功能。也許你可以提供一個更好的方法來實現呢? – endarkened 2010-09-29 12:58:55
@endarkened:這意味着在加載時分析導入的類,並在您的文件系統中找到具有所需類的JAR的位置,並從此JAR導入中解決可能的輔助依賴關係...我認爲這不僅僅是相當的難以得到。讓我看看我能否找到一些東西。 – 2010-09-29 13:39:50