繁体   English   中英

未解决的要求:在Kura Emulator中启动捆绑包时,导入包:org.slf4j

[英]Unresolved requirement: Import-Package: org.slf4j when starting bundle in Kura Emulator

嗨,大家好,

使用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!

但是,当我尝试从控制台启动/停止捆绑软件时,我仅设法实现了安装步骤。 安装后,这是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论坛上找到的检查/修复,但是没有任何效果,因此欢迎提出任何新建议。

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


按照@NeilBartlett的评论,不需要SLF4j捆绑包即可解决捆绑包的依赖性。 如果您看不到捆绑包中的任何日志行,则在此处保留答案的这一部分,以提醒您。

SLF4j捆绑包未启动( ss显示它们处于已解决状态)。 尝试start 997 998开始启动它们。

您的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或其衍生工具之一来生成清单,则无需考虑其中任何一个,这一切都是正确的。

谢谢@NeilBartlett @AlessandroDaRugna

事实证明,该示例毕竟按预期运行。 弄清楚文档中要使用哪个控制台是一个问题,因为在Eclipse IDE中,您可以在两个选项之间进行选择。 Kura Emulator Linux / java控制台(说明中显然想到的一个)不是非常用户友好,并且需要一些时间来习惯。 另一个控制台,即Host OSGi,我无法确定,但它似乎与仿真器分离了,也许是一种通用接口。

再次感谢您的支持。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM