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