不能使用bndtools启动声明性服务(DS)组件



我已经安装了eclipse的标准bndtools插件,并且还运行了apache felix osgi运行时。我正在尝试了解声明性服务(DS)组件。显然,在注释出现之前(bndtools教程中给出了一个示例),组件是使用xml数据编写的。这就是我正在努力做的。

下面是一个简单的类(它将作为DS组件发布):"HelloComponent.java"

package org.osgi.book.ds.minimal;
public class HelloComponent {
    public HelloComponent(){
        System.out.println("HelloComponent created.");
    }
}

下面是做组件声明的xml文件:"minimal.xml"

<?xml version="1.0" encoding="UTF-8"?>
<!-- minimal.xml -->
<scr:component xmlns:scr="http://www.osgi.org/xlmns/scr/v1.1.0" immediate="true">
    <implementation class="org.osgi.book.ds.minimal.HelloComponent"/>
</scr:component>

下面是bndtools用来生成最终发布到OSGi运行时的jar文件的. bind文件:"minimal_ds. bind "

Private-Package: org.osgi.book.ds.minimal
Include-Resource: minimal.xml
Service-Component: minimal.xml

请注意,我在主机运行时OSGi容器中启动并运行了以下包:

   ID|State      |Level|Name
    0|Active     |    0|System Bundle (4.4.1)
    2|Active     |    1|Apache Felix Gogo Command (0.14.0)
    3|Active     |    1|Apache Felix Gogo Runtime (0.12.1)
    4|Active     |    1|Apache Felix Gogo Shell (0.10.0)
    5|Active     |    1|BookReaderOSGiInPractice.minimal_ds (0.0.0.201509091856)
   15|Active     |    1|Apache Felix Configuration Admin Service (1.8.0)
   16|Active     |    1|Apache Felix Declarative Services (1.8.2)
   17|Active     |    1|osgi.enterprise (4.2.0.201003190513)
   18|Active     |    1|osgi.residential (4.3.0.201111022239)

尽管一切都在积极运行,我不能弄清楚为什么DS组件没有被初始化(我应该看到控制台输出:"HelloComponent created.")。如有任何帮助,不胜感激。

最后,项目目录结构如下:

BookReaderInPractice
|
|- src
|   |- org.osgi.book.ds.minimal
|           |_ HelloComponent.java
|
|- minimal_ds.bnd
|
|- minimal.xml

更新(编辑):

根据Neil Bartlett的建议进行了更新:结果答案更简单:正如我在评论中所写的那样,DS xml文件的xml名称空间中有一个错字:"xlm"而不是"xml"。

原始回答:

我想这里有两件事出了问题:

    文件minimal.xml不会被复制到生成的bundle jar中(位于"generated"文件夹)
  1. 框架不知道minimal.xml

要解决这个问题,请在minimal_ds.bnd中添加以下行:

Include-Resource: minimal.xml
Service-Component: minimal.xml

此外,不要使用HelloComponent的构造函数,而是创建一个这样的方法,它将在激活组件时调用:

public void activate() {...}

相关内容

  • 没有找到相关文章

最新更新