我也来玩Equinox(二)

本文详细介绍了一个简单的OSGi插件开发过程,包括MANIFEST.MF文件配置解析、Activator类实现及其作用,并演示了如何运行该插件。

 项目建好了,我们来看一下MANIFEST.MF 这个文件

  Manifest-Version: 1.0

  Bundle-ManifestVersion: 2

  Bundle-Name: MyFirstEquinoxExample Plug-in

  Bundle-SymbolicName: myFirstEquinoxExample

  Bundle-Version: 1.0.0

  Bundle-Activator: myfirstequinoxexample.Activator

  Import-Package: org.osgi.framework;version="1.3.0"

  Eclipse-LazyStart: true

  说明一下 Import-Package: org.osgi.framework;version="1.3.0" 这句话的意思是要运行这个例子,必须先导入 版本号为 "1.3.0"的org.osgi.framework包,

  我们来看下Activator.java这个类:

package myfirstequinoxexample;

import org.osgi.framework.BundleActivator;

import org.osgi.framework.BundleContext;

public class Activator implements BundleActivator {

 /*

  * (non-Javadoc)

  * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)

  */

 public void start(BundleContext context) throws Exception {

  System.out.println("Hello World!!");

 }

 

 /*

  * (non-Javadoc)

  * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)

  */

 public void stop(BundleContext context) throws Exception {

  System.out.println("Goodbye World!!");

 }

}

看见没,这个类只有两个方法,一个是 start() ,一个是 stop(),其中 start方法是在插件启动/加载的时候调用的,而stop()是在停止/卸载的时候调用的,我们来加点属于自己的东西进去

package myfirstequinoxexample;

import org.osgi.framework.BundleActivator;

import org.osgi.framework.BundleContext;

public class Activator implements BundleActivator {

 /*

  * (non-Javadoc)

  * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)

  */

 public void start(BundleContext context) throws Exception {

  System.out.println("这是我第一个OSGI的例子,已经成功启动了,一切运行正常");

 }

 

 /*

  * (non-Javadoc)

  * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)

  */

 public void stop(BundleContext context) throws Exception {

  System.out.println("已经成功将这个插件停止/卸载了");

 }

}

我们来运行它看看效果,选中项目,右键单击 ,从弹出菜单中选择 "Run As" --> "Open Run Dialog",

打开配置窗口,按照图片中标的序号来(我CS玩的不是很好,画的很难看)

第一步:

   双击 OSGi Framework,新建一个运行配置 ,

第二步:

   将运行配置名称改成 myFirstEquinoxExample 点击 Apply ,修改生效了

第三步:

   单击 Deselect All,全部取消选择,

第四步:

   选择我们要启动的项目 myFirstEquinoxExample(1.0.0),然后在单击 Add Required Bundles 

第五步:

   点击 Run ,OK 启动了

 

05-18
### Equinox OSGi Framework概述 Equinox 是 Eclipse 项目的一个重要组成部分,同时也是 OSGi 技术的一种开源实现[^1]。作为 Java 平台上一种动态模块化系统,OSGi 提供了强大的功能支持,使开发者能够构建高度模块化的应用程序。这些应用具备可插拔性和可扩展性的特点。 #### 核心概念 - **Bundle**: 在 OSGi 中,bundle 是最小的部署单元,相当于一个 JAR 文件,其中包含了元数据描述文件 `MANIFEST.MF`。该文件定义了 bundle 的依赖关系、导出包和服务等内容[^4]。 - **模块层**: 负责管理不同模块之间的交互,包括包的导入与导出机制[^5]。 - **生命周期层**: 定义了 bundles 如何被安装、启动、停止和卸载的过程[^5]。 - **服务层**: 支持在运行时注册、查找和使用服务的功能,从而促进松耦合架构的设计[^5]。 #### 配置与控制 为了满足不同的应用场景需求,Equinox 提供了一系列可配置参数,用于调整其行为模式。这使得用户能够在具体实践中更精细地掌控整个运行环境的行为特性[^2]。 #### 实际运用场景 除了利用 Eclipse IDE 来管理和操作 Bundles 外,在某些特定情况下还需要将 OSGi 容器集成至现有系统内部或者独立于传统方式之外自行初始化并操控它。此时就需要掌握如何手动启动 Equinox 容器,并且学会跨边界访问资源——即从外部加载 OSGi 内部组件或是反过来让 Bundle 访问宿主环境中未打包进来的类库实例[^3]。 ```java // 手动启动 Equinox 示例代码片段 FrameworkFactory frameworkFactory = ServiceLoader.load(FrameworkFactory.class).iterator().next(); Map<String, String> config = new HashMap<>(); config.put("osgi.console", "6666"); Framework framework = frameworkFactory.newFramework(config); framework.init(); framework.start(); ``` 以上展示了通过编程手段创建一个新的 OSGi 容器 (Framework),设置监听端口以便远程调试等功能选项的例子。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值