java - ClassLoader.getSystemResource() 在 OSGI Bundle 中不起作用

标签 java osgi classloader osgi-bundle

我有一个现有的 jar,现在已将其转换为 OSGI Bundle。

问题是现在(作为 OSGI Bundle),它无法加载资源。 我正在使用 ClassLoader.getSystemResource() 方法,它返回 null

使用的代码:

java.net.URL jdbc = ClassLoader.getSystemResource("com/company/cfg/provider/JDBC.xml");

我无权访问源代码,因此请通过更改配置( list 文件或其他文件)来告诉我一些方法以使其工作。

Bundle.getResource() 有效,但我无法更改源代码。

最佳答案

原因是 OSGi 包使用它自己的类加载器。因此,您要做的就是获取 OSGi 类加载器:

    java.net.URL jdbc = getClass().getClassLoader()
                                  .getResource("com/company/cfg/provider/JDBC.xml");

或者在调用发生在类 MyClass 的静态上下文中的情况下:

java.net.URL jdbc = MyClass.class.getClassLoader()
                              .getResource("com/company/cfg/provider/JDBC.xml");

调用静态 ClassLoadergetClass().getClassLoader() 之间的区别在于,在第一种情况下,您会获得 java.lang 的实例.ClassLoader 无法正确处理 OSGi 包,第二次调用将获取一个 ClassLoader 用于加载当前类,该类是 OSGi 包的一部分。

关于java - ClassLoader.getSystemResource() 在 OSGI Bundle 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32902504/

相关文章:

java - 方向改变时处理多个 fragment

java - Eclipse:如何导出插件中的文件夹

java - 如何使用 Eclipse 国际化 OSGi 应用程序?

osgi - 如何在 pax 考试中指定系统包导出

java - 在单独的上下文中运行类

java - 使用 ClassLoader 加载资源

java - 当您知道 HashSet 中最大可能的元素数时,应该使用什么加载因子

java - JBOSS 控制台日志记录,在生产环境中推荐吗?

java - GWT 代码分割集成 : MVP and Activites/Places

java - 如何访问我只通过字符串名称知道的类的类字段?