从eclipse插件调用时如何确保加载外部jar类?

时间:2010-03-02 09:11:19

标签: eclipse plugins jar external classloader

我开发了一个eclipse插件,它引用了外部安装目录中的外部jar。 所以我在bundle classpath中添加了一个条目,如下所示:

Bundle-ClassPath: external:C:\mylib.jar

我的类正确加载 - 插件可以检测到此外部MyClass中存在的类lib
但是,方法a() - 我在班级MyClass中调用失败。

方法a()如下:

public void a()
{
  URL url = this.class.getClassLoader().getResource("META-INF/startup-jar ");
  ...
}

所以返回的URL是eclipse插件目录C:\eclipse3.4\test的URL 而不是外部罐子的物理位置C:\mylib.jar

这导致方法a()失败。现在,我的问题是 -
因为我没有将外部jar复制到我的插件目录(它只出现在插件类路径中)

如何确保类加载器获取外部jar的URL路径而不是我的插件目录?

注意:我无法更改外部jar中的类加载机制,因为它是第三方依赖项,我无法控制代码。所以请建议一个解决方案,它可以帮助我正确加载外部jar类,这样我就可以得到正确的URL。

非常感谢你的帮助 - 提前

更多地解释我所面临的问题:: 我的外部jar存在于我的服务器安装的安装目录中。

当我的外部jar中的类调用URL url = this.class.getClassLoader()。getResource(“startup-jar”)

它返回相对于eclipse包路径的URL - 像C:\ eclipse3.4 ......

之类的东西

此URL用于获取引导目录(服务器的安装目录)。

所以它应该返回一个相对于服务器安装目录的路径,而是返回一个相对于eclipse安装目录的路径。

因此,我无法在服务器上调用任何API,因为它尝试使用的服务器安装目录不正确。

所以我想知道我能处理这个的最好方法是什么,所以这个方法调用返回服务器安装目录而不是eclipse包路径。

1 个答案:

答案 0 :(得分:1)

您是否无法使用正确的OSGI元数据包装此第三方依赖项并将其安装为插件/捆绑包?我们为所有第三方依赖项执行了此操作,包括Hibernate等有问题的依赖项,并使它们正常工作。

如果它是一个流行的开源库,你可以在Spring的存储库中添加OSGi元数据找到它:www.springsource.com/repository/app

一般情况下,我不推荐您在问题中描述的引用外部JAR的模式。