2017-07-14 55 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()」部分。 –

相關問題