簡體   English   中英

在Eclipse插件中使用Javassist

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM