无法为 OSGI 容器内的依赖项项目加载属性文件
Unable to load properties file for a dependency project inside OSGI container
请完成下面给出的场景
- 我有两个 Maven 项目 abc-common 和 abc-service
- abc-service 依赖于 abc-common 项目。
abc-common 正在读取名为 myConfig.properties
的属性文件,如下所示:
class PropertiesUtil {
.....
Properties props = new Properties();
props.load(PropertiesUtil.class.getClassLoader().getResourceAsStream("myConfig.properties"));
....
}
当我通过在任一项目中创建虚拟 main 方法进行测试时,这工作正常。
但是当我将此项目部署到 OSGI 容器(JBOSS Fuse)时,它无法正常工作。主要原因是,在 OSGI 容器中,PropertiesUtil.class.getLoader()
指的是对应于 abc-service 项目的包,我可以从该项目读取任何文件,但不能从 abc-common 项目。
所以问题是,如何更改我的代码,使其可以从 OSGI 容器中的 abc-common 项目的 class 路径读取属性.
备注
我正在将我的项目部署为 karaf 功能,它列出了 abc-service 和 abc-common 包作为依赖项。
此外,我尝试了不同的变体,例如
Thread.currentThread().getContextClassLoader().getResourceAsStream("myConfig.properties")
和
FrameworkUtil.getBundle(PropertiesUtil.class).getEntry("myConfig.properties.")
但其中 none 确实有效
在 OSGi 中,您需要使用包的导入|导出来允许从其他包加载资源。将属性文件放入您从该包中导出的包中。然后从另一个包中导入该包。然后您应该能够从类路径加载资源。
请完成下面给出的场景
- 我有两个 Maven 项目 abc-common 和 abc-service
- abc-service 依赖于 abc-common 项目。
abc-common 正在读取名为
myConfig.properties
的属性文件,如下所示:class PropertiesUtil { ..... Properties props = new Properties(); props.load(PropertiesUtil.class.getClassLoader().getResourceAsStream("myConfig.properties")); .... }
当我通过在任一项目中创建虚拟 main 方法进行测试时,这工作正常。
但是当我将此项目部署到 OSGI 容器(JBOSS Fuse)时,它无法正常工作。主要原因是,在 OSGI 容器中,PropertiesUtil.class.getLoader()
指的是对应于 abc-service 项目的包,我可以从该项目读取任何文件,但不能从 abc-common 项目。
所以问题是,如何更改我的代码,使其可以从 OSGI 容器中的 abc-common 项目的 class 路径读取属性.
备注 我正在将我的项目部署为 karaf 功能,它列出了 abc-service 和 abc-common 包作为依赖项。
此外,我尝试了不同的变体,例如
Thread.currentThread().getContextClassLoader().getResourceAsStream("myConfig.properties")
和
FrameworkUtil.getBundle(PropertiesUtil.class).getEntry("myConfig.properties.")
但其中 none 确实有效
在 OSGi 中,您需要使用包的导入|导出来允许从其他包加载资源。将属性文件放入您从该包中导出的包中。然后从另一个包中导入该包。然后您应该能够从类路径加载资源。