2017-03-07 21 views
0

請通過以下無法加載屬性文件OSGI容器內部的依賴項目

  • 給我有兩個Maven的場景投射ABC-共同ABC-服務
  • ABC-服務依賴於abc-common項目。
  • ABC-共同從性能讀取文件名爲myConfig.properties如下:

    class PropertiesUtil { 
        ..... 
        Properties props = new Properties(); 
        props.load(PropertiesUtil.class.getClassLoader().getResourceAsStream("myConfig.properties")); 
        .... 
    } 
    

這工作得很好,當我通過創建無論是在項目的僞主方法測試。

但是,當我將這個項目部署到一個OSGI容器(JBOSS熔絲)時,它不起作用。主要原因是,在OSGI容器中,PropertiesUtil.class.getLoader()是指對應於abc-service項目的捆綁包,我可以從該項目讀取任何文件,但不能從abc-common項目讀取。

所以現在的問題是,我怎樣才能改變我的代碼,這樣,它可以在OSGi容器中讀取ABC-共同項目的類路徑屬性。

注意 我部署我的項目作爲karaf功能,同時列出ABC-服務ABC-共同束作爲依賴。

而且,我嘗試了不同的變種一樣

Thread.currentThread().getContextClassLoader().getResourceAsStream("myConfig.properties") 

FrameworkUtil.getBundle(PropertiesUtil.class).getEntry("myConfig.properties.") 

但沒有人真正

+0

你把屬性文件放在Fuse的etc文件夾中嗎? –

+0

@SoucianceEqdamRashti。不,我只是在項目內添加屬性文件,它存在於'.jar'文件中。 – niyasc

+0

我試着在'/ etc'文件夾和結構配置文件中添加屬性文件。兩種方法都行不通。 – niyasc

回答

2

曾在OSGi中,你需要使用進口|包的出口,以允許裝載來自其他軟件包的資源。將屬性文件放入您從該包中導出的包中。然後從另一個包中導入該包。然後您應該能夠從classpath加載資源。

+0

就是這樣。我實際上是通過在主項目的導出部分導出一些隨機包來解決熔絲中的相關性問題。 – niyasc