2017-03-07 64 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