我开发了一个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包路径。
答案 0 :(得分:1)
您是否无法使用正确的OSGI元数据包装此第三方依赖项并将其安装为插件/捆绑包?我们为所有第三方依赖项执行了此操作,包括Hibernate等有问题的依赖项,并使它们正常工作。
如果它是一个流行的开源库,你可以在Spring的存储库中添加OSGi元数据找到它:www.springsource.com/repository/app
一般情况下,我不推荐您在问题中描述的引用外部JAR的模式。