Java 如何获取某个OSGI包的配置文件内容

Java 如何获取某个OSGI包的配置文件内容,java,osgi,bundle,config,Java,Osgi,Bundle,Config,我的结构如下: -- bundles ---- nicebundle ------ src -------- ... -------- nicebundle.config ---------- NiceConfig.java -------- ... ---- mybundle ------ ... ---- another bundles... -- features ---- nicebundle.config.feature ------ rootifles --------

我的结构如下:

-- bundles
---- nicebundle
------ src
-------- ...
-------- nicebundle.config
---------- NiceConfig.java
-------- ...
----  mybundle
------ ...
----  another bundles...

-- features
----  nicebundle.config.feature
------  rootifles
--------  config.cfg
------  ...
----  another features...
config.cfg
中有一些常量,我想在
mybundle
中使用(在
activate()
方法中)。我在
NiceConfig.java
中为
nicebundle
提供的是
NiceConfig@interface
,它只是镜像地列出了.cfg文件中的所有内容,如
String importantString()
,并且在.cfg文件中有一个相应的记录:
importantString=Hello

对于
nicebundle
您只需加载
NiceConfig
对象,调用方法并接收所需的常量,如:

@Activate
public void activate(final NiceConfig niceConfig) {
    String compositeString = niceConfig.importantString() + " World"; // receive "Hello World"
    ...
我想要什么-做同样的事情,但在
mybundle
中。但是,当我执行相同操作时,
niceConfig.importantString()
返回null,而不是“Hello”。我想我错过了一些非常简单和明显的东西,但我的问题是:如何实现.cfg文件的内容,如何定位我在
mybundle
中指定的(我无法更改)位置?

声明性服务(DS)将强制转换为注释类型,就像您的
NiceConfig
类型一样。但组件属性来自和

DS对Eclipse功能中的某些配置文件一无所知。Eclipse特性甚至没有安装包,因此在运行时也不可见


您可以使用的实现将捆绑包中的资源的属性配置到DS组件的相应配置管理配置中。但这需要进行一些结构更改,才能将配置文件从功能部件移动到捆绑包中。

简而言之,我的正确答案是执行以下步骤:

  • 在方括号内的.cfg文件中指定新PID,例如
    [VeryNiceConfig]
    ,然后在此方括号行后指定所有my参数,例如
    VeryNiceInt=42

  • configurationPid=“VeryNiceConfig”,configurationPolicy=configurationPolicy.REQUIRE
    添加到
    @Component
    注释中

  • 然后将我的Config
    @interface
    对象作为参数添加到我的bundle的
    activate()
    方法中,并将其用于荣耀


  • 这在eclipse中不起作用,因为.cfg文件是通过该功能添加的,并且没有直接注入到eclipse.exe中,但它在maven构建之后(在我的例子中)才起作用。

    非常感谢您的回答。这间接地让我找到了正确的答案!