我开发了一个eclipse插件,它引用了外部安装目录中的一个外部jar。因此,我在包类路径中添加了一个条目,如下所示:
Bundle-ClassPath: external:C:\mylib.jar我的类正确加载-而且插件能够检测到这个外部lib中存在的类lib。
但是,方法a() -我在类MyClass中调用失败了。
方法a()如下:
public void a()
{
URL url = this.class.getClassLoader().getResource("META-INF/startup-jar ");
...
}因此,返回的URL是eclipse目录C:\eclipse3.4\test,而不是外部jar的物理位置,即C:\mylib.jar
这导致方法a()失败。我的问题是-
因为我没有将外部jar复制到插件目录(它只存在于plugin类路径中)
如何确保类加载器获得外部jar的URL路径,而不是插件目录的URL路径?
注意:我不能更改外部jar中的类加载机制,因为它是第三方依赖项,我无法控制代码。因此,请提出一个解决方案,以帮助我正确加载外部jar类,这样我就可以获得正确的URL。
谢谢你的帮助--提前
为了进一步解释我所面临的问题::我的外部jar在我的服务器安装的安装目录中。
当外部jar中的类调用URL = this.class.getClassLoader().getResource("startup-jar")时
它返回相对于eclipse3.4路径的URL -类似于C:\eclipse3.4.
这个URL用于获取引导目录(服务器的安装目录)。
因此,它应该返回一个相对于服务器安装目录的路径,但返回一个相对于eclipse安装目录的路径。
因此,我无法调用服务器上的任何API,因为它试图使用的服务器安装目录是不正确的。
因此,我想知道处理这个问题的最佳方法是什么,以便该方法调用返回服务器安装dir,而不是eclipse包路径。
发布于 2010-03-02 09:34:18
您不能用正确的OSGI元数据包装这个第三方依赖项,并将其作为插件/包安装吗?我们这样做的所有第三方依赖,包括有问题的,如Hibernate,并使他们的工作。
如果它是一个流行的开放源码库,您可能可以在Spring的存储库中添加OSGi元数据来找到它:www.SpringSoure.com/存储库/app
一般来说,我不推荐您在问题中描述的引用外部JAR的模式。
https://stackoverflow.com/questions/2361956
复制相似问题