1

大家好,

使用 Kura Linux 模拟器,我正在运行来自 Kura 文档 http://eclipse.github.io/kura/dev/deploying-bundles.html#remote-target-device的 Hello World 示例

我设法在本地仿真模式下运行 OSGi 插件,这是 Kura Emulator Linux/java 日志的输出。

21:14:18,036 [Component Resolve Thread] INFO  HelloOsgi:15  - Bundle org.eclipse.kura.example.hello_osgi has started!

但是,当我尝试从控制台启动/停止捆绑包时,我只能设法实现安装步骤。以下是安装后主机 OSGi 控制台的一些相关输出。

osgi> install file:/home/tihomir/workspace/kura/plugins/org.eclipse.kura.example.hello_osgi_1.0.0.201712111129.jar
Bundle id is 1020
LastModified         1513020115678
Headers               Bundle-ManifestVersion = 2
 Bundle-Name = Hello World Example with Logger
 Bundle-RequiredExecutionEnvironment = JavaSE-1.8
 Bundle-SymbolicName = org.eclipse.kura.example.hello_osgi
 Bundle-Version = 1.0.0.201712111129
 Import-Package = org.eclipse.osgi.framework.console;version="1.0.0",
org.osgi.framework;version="1.3.0",
org.osgi.service.component;version="1.2.2",
org.osgi.service.component.annotations;version="1.2.0";resolution:=optional,
org.osgi.util.tracker;version="1.3.1",org.4j;version="1.7.21"
 Manifest-Version = 1.0
 Service-Component = OSGI-INF/*.xml
Location             file:/home/tihomir/workspace/kura/plugins/org.eclipse.kura.example.hello_osgi_1.0.0.201712111129.jar
State                2
Bundle                1020|Installed  |    1|org.eclipse.kura.example.hello_osgi (1.0.0.201712111129)
Version              1.0.0.201712111129
RegisteredServices   null
ServicesInUse        null
Module               osgi.identity; osgi.identity="org.eclipse.kura.example.hello_osgi"; type="osgi.bundle"; version:Version="1.0.0.201712111129" [id=1020]
SymbolicName         org.eclipse.kura.example.hello_osgi
BundleContext        null
BundleId             1020


osgi> ss
"Framework is launched."
id  State       Bundle
0   ACTIVE      org.eclipse.osgi_3.12.50.v20170928-1321
                Fragments=1
997 RESOLVED    org.slf4j.api_1.7.2.v20121108-1250
                Fragments=5, 998
998 RESOLVED    org.slf4j.impl.log4j12_1.7.2.v20131105-2200
                Master=997
1020    INSTALLED   org.eclipse.kura.example.hello_osgi_1.0.0.201712111129

但是现在,当我尝试激活捆绑包时,尽管上面的输出显示 org.slf4j 已解决,但我得到以下异常

osgi> start 1020
gogo: BundleException: Could not resolve module: org.eclipse.kura.example.hello_osgi [1020]
  Unresolved requirement: Import-Package: org.slf4j; version="1.7.21"

我在 Debian 9 上运行模拟器。这也是插件清单

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Hello World Example with Logger
Bundle-SymbolicName: org.eclipse.kura.example.hello_osgi
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Service-Component: OSGI-INF/*.xml
Import-Package: org.eclipse.osgi.framework.console;version="1.0.0",
 org.osgi.framework;version="1.3.0",
 org.osgi.service.component;version="1.2.2",
 org.osgi.service.component.annotations;version="1.2.0";resolution:=optional,
 org.osgi.util.tracker;version="1.3.1",
 org.slf4j;version="1.7.21"

已经尝试了一些我在这里和 Eclipse 论坛上找到的检查/修复,但没有任何效果,所以欢迎任何新的建议。

4

3 回答 3

0

编辑项目的 POM 并降级 SLF4j,因为 Kura 似乎提供 SLF4j v 1.7。2,而您的捆绑包至少需要 v 1.7。21


根据@NeilBartlett 的评论,您的捆绑包的依赖关系不需要启动 SLF4j 捆绑包。如果您没有看到任何来自您的捆绑包的日志行,我将这部分答案留在这里作为提醒。

SLF4j 捆绑包未启动(ss以 RESOLVED 状态显示它们)。尝试start 997 998启动它们。

于 2017-12-12T12:42:11.917 回答
0

一般来说,您的Import-Package范围看起来是错误的。例如你有这个:

Import-Package: org.slf4j;version="1.7.21"

第一:不需要指定微段(即最后一段,21)。微型版本表示错误修复、性能改进、文档更改等。这些都不会对您作为消费者产生任何语义影响。因此,您应该只从版本导入,1.7因为任何低于该版本的微版本都将与您的代码兼容。

第二:你的进口范围没有上限!这意味着您将从 version1.7.21任何更高版本导入,直到无穷大。因此,尽管您对范围的底端非常敏感,但您对高端却非常无忧无虑!您应该限制范围如下:

Import-Package: org.slf4j; version="[1.7,2.0)"

这允许您的捆绑包导入 1.7 版,但不包括 Slf4j 的 2.0 版(如果存在的话)。这是正确的,因为版本 2 表明 Slf4j API 发生了重大变化。

对所有其他进口产品的建议相同:

Import-Package: org.osgi.framework;version="[1.3, 2.0)",
  org.osgi.service.component;version="[1.2, 2.0)",
  ... etc

如果您使用bnd或其衍生工具之一来生成您的清单,您将不必考虑任何这些,并且一切都是正确的。

于 2017-12-12T15:19:17.493 回答
0

谢谢@NeilBartlett @AlessandroDaRugna

事实证明,该示例毕竟按预期工作。问题是要弄清楚文档中指的是哪个控制台,因为在 Eclipse IDE 中,您可以在两个选项之间进行选择。Kura Emulator Linux/java 控制台,显然是说明中想到的那个,它对用户不是很友好,需要一些时间来适应。另一个控制台,Host OSGi,我真的想不通,但它似乎与模拟器分离,也许是一种通用接口。

再次感谢您的支持。

于 2017-12-15T13:56:07.610 回答