在eclipse插件項目中,我有一個jar文件,我想從中加載類和調用方法。這些jar被添加到清單文件中的bundle classpath中。如何加載這些類運行時,如果我嘗試與urlclassloader我得到java.lang.NoClassDefFoundError但我相信類是在那裏。我讀過基於eclipse的osgi並使用它自己的類加載器,並且可能因此導致此錯誤。但爲什麼 ?有沒有人對我的問題有一個很好的解釋和實際的解決方案? 謝謝。eclipse插件類加載錯誤
1
A
回答
3
這是由OSGi的不同的類加載機制引起的問題。 首先,檢查是否將正確的導入聲明添加到了manifest。 如果導入是正確的(並且版本正確),它們可能不可見,因爲您正在使用的JAR沒有導出所需的類。 OSGi只能看到導出的類。 使用Eclipse,這意味着您使用Equinox作爲OSGi實現,您可以使用Eclipse-Buddy-Classloading。 使用JAR創建一個新項目並導出所有內容。現在將其註冊爲主包的夥伴 - 主包現在可以看到提供包的每個類。
請記住,在OSGi中使用類加載器是'邪惡'。班級無法通過完全合格的班級名稱來識別。
看看OSGi的核心規範關於OSGi類加載(osgi.org)和http://rajakannappan.blogspot.de/2010/03/eclipse-classloading-and-buddy-policy.html
0
我有一個類似的問題,這裏是我的解決方案的更多信息。這可能有點晚,但我希望它能幫助其他人解決同樣的問題。
我注意到eclipse(osgi)的類加載器沒有加載完整的jar。它只加載通過classloader.load(classname)
直接加載的類。所以我只讀了包含在jar中的所有類名,代碼爲this question,並通過調用顯式classloader.load(classname)
來遍歷所有className。下面是我管理的方式示例:
private void loadClasses(final File jar) {
final URL url = new URL("jar", "", "file:" + jar.getAbsolutePath() + "!/");
final List<String> classNames = getAllClassNames(jar); //Code from above link in this method
final URLClassLoader classloader = new URLClassloader(url, this.getClass().getClassLoader());
for (String className : classNames) {
classLoader.load(className);
}
}
如果你想實例化一個類你可以做到這一點與
final Class<?> clazz = classLoader.load(className);
final T type = (T)clazz.newInstance();
希望這有助於。
相關問題
- 1. 卸載Eclipse插件錯誤
- 2. 錯誤加載Eclipse
- 3. eclipse插件中的類加載
- 4. eclipse插件加載文件
- 5. eclipse - 加載插件「按需」
- 6. Eclipse插件無法加載
- 7. 如何加載eclipse插件
- 8. 「包LISP-UNIT未加載」在尖Eclipse的錯誤插件
- 9. Eclipse中加載了錯誤的文件
- 10. eclipse cvs加載錯誤
- 11. Eclipse的Maven插件錯誤
- 12. Eclipse中的插件錯誤
- 13. Eclipse juno + cuda插件錯誤
- 14. gedit-win32插件高級加載錯誤
- 15. Highcharts錯誤加載地圖插件
- 16. 錯誤1524(HYOOO):插件''未加載
- 17. jQuery插件加載,但我得到了類型錯誤
- 18. Eclipse,插件首選項加載問題
- 19. Eclipse Helios無法加載玩具插件
- 20. 已加載項目的Eclipse插件
- 21. 錯誤嘗試通過插件註冊加載插件。工具
- 22. TinyMCE和WIRIS插件錯誤 - 加載插件失敗:tiny_mce_wiris
- 23. 類加載eclipse rcp
- 24. Solr插件類加載器
- 25. 加載插件時出錯
- 26. STS/Eclipse加載錯誤的Spring Bean XSD
- 27. 錯誤而下載從Eclipse的插件氧
- 28. 如何動態替換Eclipse插件的類加載器?
- 29. Eclipse E4無法從其他插件加載類
- 30. 在Eclipse中,如何在加載另一個插件時加載我的插件?
第一個實用的解決方案是停止使用URLClassLoader。爲什麼在那裏? – 2013-03-13 13:39:06