2017-07-14 66 views
0

在卡拉夫,是否有一种方法让软件包从另一个软件包中读取属性文件?从另一个软件包中读取属性文件在卡拉夫

我有bundle1,其中包含一些类,bundle2中用途(bundle1出口包含在其行家POM经由行家束-插件的那些种类和bundle2中进口它包)。但bundle2也需要使用bundle1的属性文件。有没有办法,除了类,bundle2可以访问bundle1文件?

从我读到的一个选项是通过功能文件将属性部署到karaf等文件夹,然后可以通过蓝图从bundle2访问它。如果可能,我想避免这种情况,因为bundle1目前未作为功能部署。所以希望有一种替代方法。

回答

2

最好的方法是通过一个bundle1来包装访问。假设bundle1包含一个名为MyClass的类。在这个类中可以执行this.getClass()。getResourceAsStream(path)。该路径与该类的包相关。

因此,此类的一个方法可以返回属性文件的InputStream或允许访问实际属性。

实际上,您也可以从bundle2访问属性文件。只需使用bundle2中类的MyClass.getResourceAsStream(path)即可。这可以工作,因为每个类默认由它所在的包的类加载器加载。

+0

嗯,我可以从它所在的包(bundle1)使用您的建议(排序...即,我必须将其更改为... getClass()。getClassLoader()...)。但是,从另一个包(bundle2)访问文件仍然会为我返回null。 –

+0

您需要使用bundle1中的类来获取类加载器。像MyClass.getClass()。getClassLoader(),其中myclass位于bundle1中。你可以从任何包中的任何类来做到这一点,并将获得bundle1的类加载器。 –

+0

好的,我会再试一次。但它确实需要... getClass()。getClassLoader()...,正确吗?只是想澄清,因为你的答案留下了“getClassLoader()”部分。 –

相关问题