`
q445862108
  • 浏览: 82980 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论
阅读更多

Bndtools教程

介绍了组件开发与Bndtools。

目录

  • 1引言
  • 2安装Bndtools
  • 3创建一个API项目
  • 3.1写入和导出的API
  • 3.2定义捆绑
  • 4建立实施项目
  • 4.1创建项目
  • 4.2新增的API作为生成依赖
  • 4.3编写一个实现
  • 4.4测试实施
  • 4.5建立实施捆绑
  • 5运行一个OSGi框架
  • 6写命令组件
  • 6.1建立一个捆绑的命令组件
  • 6.2添加命令捆绑到运行时

1引言

在本教程中,我们将建立两个组件和API组成的一个示例应用程序。 下图显示了包的体系结构(简化):

在本教程中,我们创建了前三名束(矩形):

  • 该API包出口服务接口, Greeting 。
  • 该Provider软件包导入接口和出版服务的一个实例。
  • 该命令包导入接 ​​口和绑定到服务实例,同时还发布了一个Command所使用的菲利克斯壳牌捆绑服务。

2安装Bndtools

请参阅安装说明 。

3创建一个API项目

首先,我们需要创建一个Bndtools OSGi的项目。 这仅仅是一个标准的Eclipse Java项目,一个额外的建设者构建OSGi包。

  1. 从文件菜单,选择新建- > Bndtools OSGi的项目 。

  2. 在接下来的页面中,输入org.example.api作为项目的名称。 至少选择J2SE-1.5的JRE的执行环境。

  3. 接下来,您提供的项目模板的选择,开始您的项目。 选择空项目 ,然后单击Finish。 新项目将被创建。

  4. 如果这是您第一次在此工作区中使用Bndtools,你现在会看到“欢迎”对话框。 单击下一步完成以允许Bndtools设置一个配置项目并导入基本信息库。 库是哪里,你在你的项目中使用包存储在一个地方。 远程“BndTools枢纽”资源库在默认情况下,它包含了一些经常使用的包创建的。

要点:

  • Bndtools项目是基于标准的Eclipse的Java(JDT)项目。
  • Bndtools使用cnf即通常开发人员之间共享包含项目工作区范围内的配置。 它可能还包含包的存储库。
  • 指定的文件bnd.bnd在每个Bndtools项目,控制项目的设置的顶部创建的。 相同的设置所使用的BND当它从离线ANT构建调用。

3.1写入和导出的API

的OSGi提供的功能,生产者和消费者的强脱钩。 这是通过鼓励基于API的(或者在Java方面,基于接口)编程模型,其中生产者功能实现的API和功能绑定的消费者只的API,没有任何特定的实现完成。对于我们的例子中,我们将使用一个相当简单的API。

src新项目的目录中,创建一个名为包org.example.api 。 在新的包中创建一个名为Java接口Greeting ,如下所示:

 package org.example.api; public interface Greeting { String sayHello(String name); } 

3.2定义捆绑

我们已经创建的项目定义了一个捆绑符号名称(BSN)单束org.example.api (即,相同的项目名称)。 当我们创建的项目,名为包文件org.example.api.jar在创建generated目录,它会在每次我们改变了束定义或它的源代码的时间重建。

然而,捆绑目前是空的,因为我们还没有定义任何Java包的捆绑,包括。 这是Bndtools相对于其他工具的一个重要的区别:束总是空的,直到我们显式地添加一些内容。 您可以通过双击该包文件并查看其内容验证这一点:它只会有一个META-INF/MANIFEST.MF条目。

我们希望将包添加org.example.api到该包的导出包。 于是打开bnd.bnd在项目的顶层文件,并选择目录选项卡。 现在,该软件包可以通过以下两种方式之一来补充:

  • 单击导出包部分的标题中的“+”图标,然后选择org.example.api从对话框,然后单击OK(确定) ...
  • 拖动和拖放包org.example.api从Eclipse的Package Explorer视图进入导出软件包列表中。

(提示:高级用户可能更愿意进入Export-Package: org.example.api手动在Source选项卡)。

只要做到这一点,出现标题为“缺少包装信息”弹出对话框。 此对话涉及到包的版本:它要求我们声明此导出的软件包的版本。 单击OK(确定)。

目录选项卡现在应该会出现在下面的截图:

保存文件,并捆绑将被重建以包括选定出口。 我们可以通过打开导入/导出视图,并选择在Package Explorer中的包文件确认。 请注意该包已被分配1.0.0版本:

要点:

  • 该项目配置和捆绑内容由定义bnd.bnd 。
  • 它的“捆绑符号名称”或BSN - - 捆绑的身份是由项目名称控制。 在这种情况下,捆绑的BSN等于项目名称。
  • 束总是空的,直到我们的内容明确地添加他们。 添加一个包导出包面板包含了包中的捆绑,并且还宣布它作为一个出口META-INF/MANIFEST.MF 。
  • 通常包包含的不仅仅是一个单一的界面。 这个例子是故意简单化。

4建立实施项目

现在,我们将创建另一个项目,定义了两个包:在一个供应商和客户Greeting的API。

4.1创建项目

创建另一个Bndtools项目,命名为org.example.impls 。 项目模板步骤中,选择组件开发(声明式服务),然后单击Finish。

4.2新增的API作为生成依赖

我们需要的API项目添加为这个新项目的生成时间依赖性。

bnd.bnd新创建的项目的文件都会自动打开。 单击Build选项卡并添加org.example.api通过以下任一方式:

  • 单击 Build 路径面板工具栏中的“+”图标。 双击org.example.api下,在出现的对话框中“工作区”;它会在移动到右侧。 单击Finish(完成)

  • 拖动和拖放org.example.api查看到构建路径面板。

在这两种情况下, org.example.api束将出现在构建路径面板的版本注释“最新的”:

保存该文件。

要点:

  • 该项目的建设时间依赖关系可以在的构建路径面板中添加bnd.bnd编辑器。
  • (通过Eclipse的现有“添加到构建路径”菜单即而非)添加这样的依赖关系,确保建设脱机使用Ant时完全相同的依赖关系被使用。

4.3编写一个实现

我们将编写一个实现类Greeting接口。 当项目从模板创建,Java源代码名为类org.example.ExampleComponent生成。 现在打开这个源文件,并使其实现Greeting :

 package org.example; import org.example.api.Greeting; import aQute.bnd.annotation.component.Component; @Component public class ExampleComponent implements Greeting { public String sayHello(String name) { return "Hello " + name; } } 

注意使用的@Component注解。 这使得我们的捆绑使用OSGi的声明式服务来声明API的实现类。 这意味着类的实例将被自动创建,并与OSGi服务注册表中注册。 注释是编译时只,而不会污染我们的类的运行时依赖关系 - 换句话说,这是一个“普通Java对象”或者是POJO。

4.4测试实施

我们应该编写一个测试案例,以确保按预期实现类作品。 test文件夹,一个测试用例类已经存在一个名为org.example.ExampleComponentTest 。 写一个测试方法如下:

 package org.example; import junit.framework.TestCase; public class ExampleComponentTest extends TestCase { public void testSaysHello() throws Exception { String result = new ExampleComponent().sayHello("Bob"); assertEquals("Hello Bob", result); } } 

现在,在文件上单击鼠标右键并选择 Run As> JUnit的测试 。

验证JUnit视图显示一个绿色的吧。 如果没有,回去和修复代码!

需要注意的是,由于这是一个单元测试,而不是一个集成测试,我们并不需要运行一个OSGi框架; 该标准的JUnit启动器使用。 再次,这是可能的,因为所检测的部件是一个POJO。

4.5建立实施捆绑

正如在以前的项目,一个包会自动根据内容内置bnd.bnd 。 在当前项目中但是,我们要建立两个独立的包。 为了实现这一目标,我们需要启用一个名为“子束”功能。

在项目上单击右键org.example.impls选择New>包描述符 。 在出现的对话框中,键入名称provider ,然后单击Finish。

一个弹出对话框询问是否要启用子束。 单击OK(确定)。

有些设置会从移动bnd.bnd到新provider.bnd文件。 现在你应该找一个包中generated一个名为org.example.impls.provider.jar其中包含org.example封装和声明式服务组件声明OSGI-INF/org.example.ExampleComponent.xml 。

要点:

  • Bndtools项目可以输出一个单束或多束。
  • 中的单束的项目的情况下,该包的内容中被定义bnd.bnd 。
  • 在多束项目的情况下,每个包的内容在一个单独的定义.bnd文件。 bnd.bnd文件仍用于定义项目范围的设置,如构建依赖关系。

5运行一个OSGi框架

现在我们想运行OSGi的。 为了实现这一目标,我们需要创建一个“运行描述符”,它定义捆绑运行的集合,连同其他一些运行时设置。

在项目上单击右键org.example.impls选择New>运行描述 。 在出现的对话框中,输入run作为文件名 ​​,然后单击下一步 。 在对话框的下一个页面会要求我们选择一个模板; 选择阿帕奇菲利克斯4勾勾外壳 ,然后单击Finish。

在编辑器中的新run.bndrun文件,点击运行OSGi的靠近右上角。 不久,菲利克斯Shell提示符“ g! “将出现在控制台视图。 键入lb命令来查看包的列表:

 g! lb START LEVEL 1 ID|State |Level|Name 0|Active | 0|System Bundle (4.0.3) 1|Active | 1|Apache Felix Gogo Runtime (0.10.0) 2|Active | 1|Apache Felix Gogo Shell (0.10.0) 3|Active | 1|Apache Felix Gogo Command (0.12.0) g! 

下一步,我们希望包括org.example.impls.providerosgi.cmpn束。 这可完成如下:

  • 点击运行要求面板,打开“添加捆绑要求”对话框的工具栏上的“+”图标。
  • 在“工作区”,双击org.example.impls.provider 。
  • 在“Bndtools枢纽”,双击osgi.cmpn 。
  • 单击Finish(完成)。

运行要求面板现在看起来应该像这样:

检查保存自动解析 ,然后保存该文件。 返回到控制台视图,类型lb再次:

 g! lb START LEVEL 1 ID|State |Level|Name 0|Active | 0|System Bundle (4.0.3) 1|Active | 1|Apache Felix Gogo Runtime (0.10.0) 2|Active | 1|Apache Felix Gogo Shell (0.10.0) 3|Active | 1|Apache Felix Gogo Command (0.12.0) 4|Active | 1|Apache Felix Configuration Admin Service (1.4.0) 5|Active | 1|Apache Felix Log Service (1.0.1) 6|Active | 1|Apache Felix Declarative Services (1.6.2) 7|Active | 1|org.example.api (0.0.0) 8|Active | 1|org.example.impls.provider (0.0.0) 9|Active | 1|osgi.cmpn (4.2.0.200908310645) g! 

该供应商捆绑已被添加到运行时动态。 请注意,该API包和Apache菲利克斯声明式服务也将被添加,因为它们解析为供应商的依赖。

现在我们可以看看使用命令由我们提供捆绑发布的服务inspect capability service 8 :

 g! inspect capability service 8 org.example.impls.provider [8] provides: ---------------------------------------- service; org.example.api.Greeting with properties: component.id = 0 component.name = org.example.ExampleComponent service.id = 24 g! 

我们现在捆绑下的出版服务Greeting界面。

要点:

  • 运行时配置可以在一个被定义.bndrun文件。 多个不同的运行配置可以被使用,从而导致不​​同的集束,不同的OSGi框架的实现等
  • 该集绑定到包括从运行需求列表导出。 Bndtools使用OBR解析来解析包,包括它们的静态依赖关系的列表。
  • 如果OSGi框架仍在运行,然后保存bndrun文件会导致包的列表中进行动态更新。 因此,我们可以在不重新启动添加和删除软件包。
  • 编辑现有的包 - 包括编辑Java代码,它包括了 - 也将导致捆绑在运行时被动态更新。

6写命令组件

最后,我们将编写消耗问候服务,并公布可从菲利克斯shell调用shell命令的组件。

首先,我们需要做的菲利克斯外壳API可用来编译反对。 打开bnd.bnd并变更为Build选项卡。 添加org.apache.felix.gogo.runtime的编译依赖列表,并保存文件:

现在,在其下创建一个新的Java包src文件夹名为org.example.command 。 在这个包中创建一个类GreetingCommand如下:

 package org.example.command; import org.apache.felix.service.command.CommandProcessor; import org.example.api.Greeting; import aQute.bnd.annotation.component.Component; import aQute.bnd.annotation.component.Reference; @Component(properties = { /* Felix GoGo Shell Commands */ CommandProcessor.COMMAND_SCOPE + ":String=example", CommandProcessor.COMMAND_FUNCTION + ":String=greet" }, provide = Object.class ) public class GreetingCommand { private Greeting greetingSvc; @Reference public void setGreeting(Greeting greetingSvc) { this.greetingSvc = greetingSvc; } public void greet(String name) { System.out.println(greetingSvc.sayHello(name)); } } 

6.1建立一个捆绑的命令组件

该命令组件是不提供包的一部分,因为它生活在那个没有包含一个包。 我们可以将其添加到供应商捆绑,但它会更有意义创建一个单独的包吧。

再次右键单击在org.example.impls项目,然后再次选择New>包描述符 。 输入名称为command ,然后单击Finish。

添加包org.example.command到新创建的文件的私人包面板。 和以前一样,这样可以使用“+”按钮,在工具栏或通过拖放式操作来完成。

我们还需要声明该软件包包含声明式服务组件。 切换到编辑器的内容选项卡,并在声明式服务下拉列表中选择Bnd注解 。 现在保存文件。

6.2添加命令捆绑到运行时

切换回编辑run.bndrun 。 运行要求选项卡,添加org.example.impls.command捆绑,并保存文件。

该命令包现在打字的时候出现在包列表lb :

 g! lb START LEVEL 1 ID|State |Level|Name 0|Active | 0|System Bundle (4.0.3) 1|Active | 1|Apache Felix Gogo Runtime (0.10.0) 2|Active | 1|Apache Felix Gogo Shell (0.10.0) 3|Active | 1|Apache Felix Gogo Command (0.12.0) 4|Active | 1|Apache Felix Configuration Admin Service (1.4.0) 5|Active | 1|Apache Felix Log Service (1.0.1) 6|Active | 1|Apache Felix Declarative Services (1.6.2) 7|Active | 1|org.example.api (0.0.0) 8|Active | 1|org.example.impls.provider (0.0.0) 9|Active | 1|osgi.cmpn (4.2.0.200908310645) 10|Active | 1|org.example.impls.command (0.0.0) g! 

最后, greet命令现在将可从勾勾外壳:

 g! greet BndTools Hello BndTools g! 
分享到:
评论

相关推荐

    BndTools安装及使用教程

    ### BndTools安装及使用教程 #### 一、引言 在本教程中,我们将构建一个由两个组件和一个API组成的示例应用。通过这个过程,读者将学习如何使用BndTools来简化OSGi框架中的组件开发。下图简要展示了我们将创建的三...

    bndtools插件

    **bndtools插件详解** **一、bndtools简介** bndtools是一款强大的开源工具,专门用于构建和管理OSGi(Open Service Gateway Initiative)应用程序。OSGi是一种模块化Java平台,它允许开发者将应用程序分解为独立...

    BndTools工具

    **BndTools详解** BndTools是一款开源的集成开发环境插件,专为Eclipse设计,旨在简化OSGi(Open Service Gateway Initiative)模块化应用程序的开发、构建和管理过程。OSGi是一种Java平台上的模块化系统,它允许...

    bndtools2.1 插件 离线安装包

    bndtools2.1 离线插件安装包,网上其他地方找不到的,识货的下载吧。 安装步骤同Eclipse其他插件安装一样。下载下来解压,然后新建link文件链接到你解压的目录,然后把Link文件放到eclipse根目录下面的links文件夹...

    OSGI Felix BndTools例子(一步一步指导)

    标题 "OSGI Felix BndTools例子(一步一步指导)" 指向的是一个关于使用OSGI框架,特别是Felix实现,并配合BndTools工具进行模块化开发的教程。在这个教程中,作者逐步指导如何构建和管理OSGI服务。下面将详细阐述OSGI...

    bndtools.github.io:Bndtools.org主要网站

    Bndtools.org主要网站===================== 该存储库包含位于的bndtools.org网站。 该网站被维护为markdown,并由使用转换为HTML。反馈始终欢迎反馈。 有关一般讨论,请使用列表。 我们还有列表,用于讨论bndtools...

    bnd:BndBndtools。 用于构建OSGi捆绑软件的工具,包括Eclipse,Maven和Gradle插件

    README Bnd / Bndtools Bnd / Bndtools是OSGi的瑞士军刀。 它基于对类代码的分析为您创建清单标头,验证您的设置,管理项目依赖项,diff罐子等等。 有关Bnd的信息可在上找到,有关Bndtools的信息可在上找到。 资料...

    hessian-bndtools-osgi:此存储库包含几个 bndtools 项目,这些项目解释了如何从外部 Java 应用程序使用 OSGi 声明式服务

    hessian-bndtools-OSGI 此存储库包含几个 bndtools 项目,这些项目解释了如何从外部 Java 应用程序使用 OSGi 声明式服务 bndtools 运行描述符未处于工作状态。 最好将生成的目录中的 jar 文件复制并部署到 OSGi ...

    opencmis_bndtools:示例bndtools项目,该项目演示了无法访问“ Apache Chemistry OpenCMIS Client OSGi包装器”中的软件包

    在"opencmis_bndtools"项目中,开发者遇到的问题是无法在使用Bndtools(一个基于Eclipse的OSGi开发工具)时正确地访问或导入Apache Chemistry OpenCMIS客户端的OSGi包。这可能是由于以下原因: 1. **依赖管理问题**...

    bndtools-aether-example:一个示例项目,展示了如何使用 bndtools 中的 maven aether 存储库

    bnd/bndtools 和 Maven Aether 这个示例项目展示了如何在 bnd/bndtools 中使用来自 maven 存储库的依赖项。 该项目包含一个 bndrun 配置,它使用来自 maven 中心的一些工件。 在项目中有一个 bnd 文件,其中包含...

    eduonixosgi:osgi的教程代码

    在这个教程中,你将探索如何在Eclipse集成开发环境中(IDE)使用e(fx)clipse和BndTools这两个工具来操作OSGi项目。 **Eclipse IDE** 是一个流行的开源集成开发环境,广泛用于Java编程。它提供了一整套工具,帮助...

    bndWIN2_java_

    "bnd"可能是"Bndtools"的简称,这是一个广泛使用的Java项目管理和构建工具,它提供了强大的类路径管理和打包功能。 【描述】"Java to java on order to java. Not to mention java" 这句话虽然带有诗意,但似乎在...

    example:AIOLOS 上的示例应用程序

    该示例应用程序包含6个项目:Bndtools配置项目cnf ,一些应用程序实现将org.example.api , org.example.impls和org.example.servlet捆绑在一起,一个Android客户端应用程序org.example.android和AIOLOS tools项目. ...

    osgi 构建模块化云应用之中文版

    在本书中,作者介绍了OSGi的基本概念和高级语义,并且通过实例演示了如何使用Maven、Bndtools等工具来构建OSGi应用。Bndtools是一个强大的构建工具,它带有BND插件,可以帮助开发者打包、测试和调试OSGi Bundles。...

    com.liferay.tools

    enRoute 提供了基于 Maven 和 BNDTools 的构建系统,以及一组预配置的模板和示例,以减少学习曲线。 **BNDTools** BNDTools 是一个集成开发环境(IDE)插件,专为 OSGi 开发设计,它支持 Eclipse。BNDTools 提供了...

    osgi技术探索

    而Bndtools是Eclipse的插件,为OSGi开发提供了图形化的支持,包括自动化的MANIFEST.MF编辑、依赖管理以及构建流程。 总的来说,OSGi技术通过模块化、动态性和服务化为Java应用程序带来了一种新的开发模式。学习和...

    很久之前的osgi整理

    此外,还可能涉及了与OSGi相关的工具,如Bndtools,用于创建和管理OSGi bundle的工具。 然而,压缩包子文件的文件名称“我的装修清单.xls”似乎与OSGi主题不直接相关,可能是上传时的一个误放,或者是一个示例应用...

    在Eclipse RCP中应用Spring OSGI 管理bean(一)

    标题中的“在Eclipse RCP中应用Spring OSGI 管理bean(一)”表明这是一篇关于如何在Eclipse Rich Client Platform (RCP)应用程序中集成Spring框架,并利用OSGi服务来管理Bean的教程。Eclipse RCP是一个用于构建桌面...

    ebook download

    “工具”标签可能意味着书中介绍了一些与OSGi相关的开发工具,例如Eclipse IDE的OSGi插件,或者是用于构建和管理OSGi应用的工具链,如Bndtools等。这些工具可以帮助开发者更高效地进行OSGi应用的开发和调试。 综合...

Global site tag (gtag.js) - Google Analytics