我有一个现有的 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");
调用静态 ClassLoader
和 getClass().getClassLoader()
之间的区别在于,在第一种情况下,您会获得 java.lang 的实例.ClassLoader
无法正确处理 OSGi 包,第二次调用将获取一个 ClassLoader
用于加载当前类,该类是 OSGi 包的一部分。
关于java - ClassLoader.getSystemResource() 在 OSGI Bundle 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32902504/