0

我有以下结构:

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

-- features
----  nicebundle.config.feature
------  rootifles
--------  config.cfg
------  ...
----  another features...

其中config.cfg有一些常量,我想在mybundleactivate()方法中)中使用它们。我所拥有NiceConfig.javanicebundleNiceConfig @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

4

2 回答 2

1

声明式服务 (DS) 会将组件属性强制转换为注释类型,就像您的NiceConfig类型一样。但组件属性来自 Configuration Admin 中的组件描述配置

DS 对 Eclipse 功能中的某些配置文件一无所知。而且 Eclipse 功能甚至都没有安装包,因此无论如何在运行时都不可见。

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

于 2020-07-14T14:23:16.767 回答
0

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

  1. 在方括号中指定 .cfg-File 中的新 PID,例如[VeryNiceConfig],然后在此方括号行之后指定我的所有参数,例如VeryNiceInt=42

  2. 添加configurationPid = "VeryNiceConfig", configurationPolicy = ConfigurationPolicy.REQUIRE@Component注释。

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

这在eclipse中不起作用,因为.cfg-File是通过该功能添加的,并且没有直接注入eclipse.exe,但它在(在我的情况下)maven构建之后起作用。

于 2020-07-17T07:23:35.637 回答