未解决的要求:在Kura Emulator

时间:2017-12-11 20:45:24

标签: java eclipse osgi slf4j kura

大家好,

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

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

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

但是,当我尝试从控制台启动/停止捆绑包时,我只设法实现安装步骤。 以下是安装后Host 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论坛上发现的检查/修复,但没有任何效果,所以欢迎任何新的建议。

3 个答案:

答案 0 :(得分:0)

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

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

SLF4j捆绑包未启动(ss将其显示为处于RESOLVED状态)。尝试使用start 997 998启动它们。

答案 1 :(得分:0)

您的Import-Package范围一般看起来不对。例如,你有这个:

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

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

第二:你的进口范围没有上限!这意味着您将从版本1.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或其衍生工具之一来生成清单,那么您将不必考虑其中任何一项,而且这一切都是正确的。

答案 2 :(得分:0)

感谢@NeilBartlett @AlessandroDaRugna

事实证明,这个例子毕竟是按预期工作的。 这是一个确定文档中的控制台的问题,因为在Eclipse IDE中,您可以选择两个选项。 Kura Emulator Linux / java控制台,显然是一个指令,它不是非常用户友好,需要一些时间习惯。 另一个控制台,主机OSGi,我无法弄明白,但它似乎与仿真器分离,可能是一种通用接口。

再次感谢您的支持。