OSGi 插件在重启后被删除

OSGi plug-in gets remove after reboot

我在 Raspberry PI 上的 Eclipse Kura 中创建了 3 个不同的 OSGI 插件(作为 Eclipse 插件项目开发)运行。两个插件作为一个库提供共同使用的类。第三个插件是使用 Kura 提供的机制与串行端口通信的服务。后者是按照 Kura 入门页面中的描述开发的。两个库插件都是基础插件工程

一切都已解决并正确启动,并且似乎按预期工作,所以没有什么特别之处。当 PI 重新启动时出现问题,导致 OSGI 引擎也重新启动。这两个库插件似乎被重启删除了。串行通信服务仍然存在,但由于缺少依赖项而无法启动。

我的问题是:是什么导致插件在重新启动时被删除?如何防止这种情况发生?感谢阅读本文 post!

正如您在说明中所述,install 命令用于添加依赖包。 OSGi 通常是持久性的,因此如果您以任何方式(包括使用 install 命令)安装捆绑包,它们将在您下次启动 OSGi 时仍然存在并处于相同状态。

为了让它工作,OSGi 有一个 "storage" 文件夹。这是通过设置 org.osgi.framework.storage 属性 来配置的,在 Equinox 中默认为 ./configuration。您的启动器可能会清除此目录,从而导致 OSGi 失去其持久状态。

有两种可能的解决方案:

  1. 不要清除 OSGi 存储文件夹。
  2. 将您的启动器应用程序配置为始终包含您想要的所有包。

我实际上建议两者都做。 OSGi 意味着 是持久的;但也不是真的 user-friendly 要求用户键入 install 命令以使应用程序工作。

我建议您将捆绑包导出为 OSGi 部署包。
然后将 DP 复制到你的 Pi 并告诉 Kura 在启动时加载它。

我写了一个 sample project,你可以用它来创建 Maven 的部署包,或者你可以用 bash 脚本打包你的包。

打包后,将你的DP复制到/opt/eclipse/kura/kura/packages/文件夹中。 然后编辑 /opt/eclipse/kura/kura/dpa.properties 文件并为您的 DP

添加一行
yourbundles=file\:/opt/eclipse/kura/kura/packages/your-bundles.dp

This is the official Kura documentation on how to do it.

备选方案是使用 Kura 的网络 UI 或 DEPLOY cloudlet 安装 DP。