bndtools教程

Posted Yuyu.Racaud

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bndtools教程相关的知识,希望对你有一定的参考价值。

使用工具编程的确能给人们带来很多便利,但是在不会用之前,且缺乏相应的中文资料让你去了解时,真是一种折磨,同时也是一种挑战。

bndTools其实就是用来开发OSGi的一个工具,它为开发提供了便利,具体是哪些便利,在在这里就不细说了。

花了一个星期,终于把bndtools的程序和逻辑整理清楚,不想说太多细节,先看整体框架。

bndtools主要分为三部分:

1.api,也就是提供服务的一个接口(我们可以把它理解为菜单)

2.impl,对接口的具体实现(可以指菜单上具体某个菜的做法,人家在后厨已经做好了)

3.command,也就是用具体命令调用此服务(可以理解为客户点菜)

了解了这三部分之后我们就可以写程序了:

1.在eclipse上安装bndTools

2.写一个api程序,我写的是com.example.api

package com.example.api;

/**
 * @author Joye Luo
 */
public interface Greeting {
    public String sayHello(String name);
}

在bnd.bnd文件中把它添加为导出包,因为等下写其它bundle的时候会需要依赖它,这其实就是OSGi的一个模块化机制,实现了低耦合。

3.写一个实现程序,我写的是com.example.impls

package com.example.impls;

import org.osgi.service.component.annotations.*;

import com.example.api.Greeting;

/**
 * @author Joye Luo
 */
@Component
public class GreetingImpl implements Greeting {
    @Override
    public String sayHello(String name) {
        return "Hello " +name;
    }
}

@Component注释可以提供注册服务的功能,因为在这里依赖了api,所以要在它的bnd.bnd文件Build Path中加上com.example.api这个包

4.写一个command程序,让它调用这个服务,我把它放在com.example.impls下的com.example.impls.command包下,其实也可以另起一个程序,我比较懒。

import org.apache.felix.service.command.CommandProcessor;

import com.example.api.Greeting;

import aQute.bnd.annotation.component.Component;
import aQute.bnd.annotation.component.Reference;

/**
 * @author Joye Luo
 */
@Component(properties={
    CommandProcessor.COMMAND_SCOPE+":String=example",
    CommandProcessor.COMMAND_FUNCTION+":String=greet"
},
provide=Object.class)
public class Command {
private Greeting greeting;

public void greet(String name){
    System.out.println("return:"+greeting.sayHello(name));
}

@Reference
public void setUserService(Greeting greeeting){
    this.greeting = greeeting;
}

}

这就会出现一个问题,在一个目录结构下,怎么让它打包出两个jar包出来,右键->new->bnd descriptor file,为这两个包配置两个不同的bnd文件就好啦。

4.最后一步就是运行它啦,随便建一个项目,我建的是com.example.client,new->bndrun file,把你要运行的bundle都添加进去,点Run OSGi,就可以打开Console了,输入命令:greet joye(随便其他什么字符串都可以)

可以看到输出为Hello joye

所有功能都完成啦,是不是很简答呢,接下来,show u the code

https://github.com/JoyeLuo/osgi-example

以上是关于bndtools教程的主要内容,如果未能解决你的问题,请参考以下文章

如何替换 BndTools 默认启动器并更改导出文件结构

使用 Maven、OSGi 和 Bndtools

如何使用 bndtools 通过 Scala 创建 OSGi 包?

BndTools,如何添加非 OSGi JAR?

将 PaxExam 与 Bndtools 一起使用

带有 lombok 的 Bndtools“包含未知容器”