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

标签 eclipse plugins jar external classloader

我开发了一个 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/

相关文章:

eclipse - 如何使用 SpringSource Toolsuite 运行 Web 应用程序?

java - 添加额外类时找不到 Android 源

grails - Grails 中已弃用 install-plugin 命令

java - 为什么我的 .jar 文件运行速度比 eclipse 中的程序慢?

file - Java JXTA - JAR 文件在哪里?

eclipse - Jetty 9.x eclipse插件

eclipse - 哪个是最好的 RCP 平台

java - 实现模块化架构/简单的插件系统

visual-studio - 做一个懒惰的开发者还是不做一个懒惰的开发者?

jar - 运行 Spring 批处理时出现 CommandLineJobRunner 错误无法找到或加载主类 CommandLineJobRunner