1.打开Eclipse,依次打开“File -> new -> project -> Plug-in Development -> Plug-in Project”,如下图所示:
若没有Plug-in Development,参考如何解决eclipse中没有plugin development,进行处理。
点击next,输入名称,注意目标平台的选择,由于我们的项目是一个通用的 OSGi bundle,所以选择 equinox,如下图所示:
点击next,更改插件的名称,Options选择第一个缺省的设置,如下图所示:
点击next,不使用任何模板,所以勾掉缺省的选项:
点击finish,创建成功。
2.打开“src -> org.test.helloworld -> Activator.java”,在start方法中加入打印HelloWorld的代码,如下:
package org.test.helloworld;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator implements BundleActivator {
private static BundleContext context;
static BundleContext getContext() {
return context;
}
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext bundleContext) throws Exception {
Activator.context = bundleContext;
System.out.println("Hello World");
}
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext bundleContext) throws Exception {
Activator.context = null;
}
}
随后保存。
3.打开“Run -> Run Configurations...”,找到OSGI Framework,点击右键选择new,填写名称,选择对应的Workspace,Target Platform选择下图所示的几项,勾掉最下方的选择框:
4.点击Run,查看控制台是否打印了Hello World,若无报错,则创建成功
PS:Equinox OSGi 主要的控制台命令表
类别 | 命令 | 含义 |
---|---|---|
控制框架 | launch | 启动框架 |
shutdown | 停止框架 | |
close | 关闭、退出框架 | |
exit | 立即退出,相当于 System.exit | |
init | 卸载所有 bundle(前提是已经 shutdown) | |
setprop | 设置属性,在运行时进行 | |
控制 bundle | Install | 安装 |
uninstall | 卸载 | |
Start | 启动 | |
Stop | 停止 | |
Refresh | 刷新 | |
Update | 更新 | |
展示状态 | Status | 展示安装的 bundle 和注册的服务 |
Ss | 展示所有 bundle 的简单状态 | |
Services | 展示注册服务的详细信息 | |
Packages | 展示导入、导出包的状态 | |
Bundles | 展示所有已经安装的 bundles 的状态 | |
Headers | 展示 bundles 的头信息,即 MANIFEST.MF 中的内容 | |
Log | 展示 LOG 入口信息 | |
其它 | Exec | 在另外一个进程中执行一个命令(阻塞状态) |
Fork | 和 EXEC 不同的是不会引起阻塞 | |
Gc | 促使垃圾回收 | |
Getprop | 得到属性,或者某个属性 | |
控制启动级别 | Sl | 得到某个 bundle 或者整个框架的 start level 信息 |
Setfwsl | 设置框架的 start level | |
Setbsl | 设置 bundle 的 start level | |
setibsl | 设置初始化 bundle 的 start level |