ISelection - 如何在导航器中为选定的类获取ClassLoader

时间:2011-03-20 18:34:10

标签: eclipse-plugin osgi classloader eclipse-jdt urlclassloader

我是Eclipse插件开发的新手,我正在尝试开发一个插件,我需要加载一个在导航器中选择的类。

您能告诉我如何从eclipse插件加载类或创建类加载器,以及在使用我的插件的eclipse工作台中加载类。

提前致谢。

此致 吉拉尼

1 个答案:

答案 0 :(得分:0)

您需要创建URLClassLoader。根据您的安全考虑,您可能希望它成为父级或不是父级。如果由OSGi包类加载器作为父级,那么用户将可以访问该特定包中的所有类,这可能是用户获得对整个Eclipse平台的运行时访问的后门(并访问插件注册表和OSGi服务等)。用户也可以拨打System.exit()。这可能不是单个用户系统上的问题,但需要考虑,特别是如果用户可能从互联网上下载未经验证的脚本。

话虽这么说,你需要做这样的事情:

  1. 实例化URLClassLoader并添加包含您要加载的类文件的目录的URL。
  2. 如果您希望类可以访问Eclipse运行时,那么将父加载器设置为 ((BundleHost) Activator.getBundleContext().getBundle()).getLoaderProxy().getBundleLoader()
  3. 添加与用户可以从中加载类的URL对应的所有目录。但是,您必须包含所有依赖项才能加载类。
  4. 这应该足以加载您需要的类。