[英]Using Javassist in an Eclipse plugin
在將應用程序部署為Eclipse插件時,我在使用javassist時遇到問題。具體來說,以下代碼:
ClassPool.getDefault().get(aClassName);
拋出一個: javassist.NotFoundException
。
如果不作為插件的一部分使用,代碼工作正常。 我試圖了解問題是否在我的插件的類路徑的配置中(似乎不是這種情況),或者是在將Eclipse插件項目作為Eclipse應用程序執行時與Eclipse使用的類加載器相關的東西。
觸發問題的代碼是自定義Eclipse編輯器的一部分。 因此,當用戶嘗試打開與編輯器關聯的文檔時,會出現這種情況。 javassist類試圖加載是插件類的一部分。
提前感謝任何線索!
從ClassPool的文檔:
返回默認的類池。 返回的對象始終相同,因為此方法是單例工廠。
默認類池搜索系統搜索路徑,該路徑通常包括平台庫,擴展庫以及-classpath選項或CLASSPATH環境變量指定的搜索路徑。
該ClassPool
通過返回ClassPool.getDefault()
只增加了系統的classpath。 系統類加載器不會加載Eclipse插件,因此它無法看到插件的類。
您需要將插件的類加載器添加到類池中,以便它可以看到這些類。 這可以通過以下方式完成:
ClassLoader pluginLoader = ...;
ClassPool pool = ClassPool.getDefault();
pool.appendClassPath(new LoaderClassPath(pluginLoader));
其中pluginLoader
是插件的類加載器。 獲得這個的最簡單方法可能就是通過
pluginLoader = <one of your plugin's classes>.class.getClassLoader();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.