BndTools,如何添加非 OSGi JAR?
Posted
技术标签:
【中文标题】BndTools,如何添加非 OSGi JAR?【英文标题】:BndTools, How to add a non-OSGi JAR? 【发布时间】:2018-09-22 08:25:45 【问题描述】:我想将 jcraft 库添加到我的 osgi 项目中。使用普通 JAR 会破坏整个项目。缺少要求接线包
ERROR: Bundle com.herle.iiot.application.installation [6] Error starting file:/D:/HERLE/Data/iot-sdk/FelixLauncher/bundle/com.herle.iiot.application.installation-1.5.0.jar
(org.osgi.framework.BundleException: Unable to resolve com.herle.iiot.application.installation [6](R 6.0): missing requirement [com.herle.iiot.application.installation [6](R 6.0)] osgi.w
iring.package; (osgi.wiring.package=com.jcraft.jzlib) Unresolved requirements: [[com.herle.iiot.application.installation [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=com.jcraft.jzlib)]
)
org.osgi.framework.BundleException: Unable to resolve com.herle.iiot.application.installation [6](R 6.0): missing requirement [com.herle.iiot.application.installation [6](R 6.0)] osgi.wi
ring.package; (osgi.wiring.package=com.jcraft.jzlib) Unresolved requirements: [[com.herle.iiot.application.installation [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=com.jcraft.jzlib)]
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
at java.lang.Thread.run(Unknown Source)
[Device Manager] info: Passive start
Watched path D:\HERLE\Data\iot-sdk\FelixLauncher\fileinstall key sun.nio.fs.WindowsWatchService$WindowsWatchKey@ae7c53
felix.fileinstall.poll (ms) = 2000, felix.fileinstall.dir = D:\HERLE\Data\iot-sdk\FelixLauncher\.\fileinstall, felix.fileinstall.log.level = 4, felix.fileinstall.bundles.new.start = tru
e, felix.fileinstall.tmpdir = .\tmp, felix.fileinstall.filter = null, felix.fileinstall.start.level = 0
请告诉我如何使用 bnd.bnd 配置文件做到这一点?
【问题讨论】:
【参考方案1】:主要考虑的是配置。如果您使用的是外部库或 jar,则需要将其作为私有包提及。
请找到我的示例 bnd.bnd 文件。
Bundle-Name: $project.artifactId
Bundle-SymbolicName: $project.artifactId
Bundle-Description: Template-Bundle for developing an application
Bundle-Category: Application
Bundle-Copyright: 2017 (c) Herleraja@gmail.com
-dsannotations: *
-metatypeannotations: *
Private-Package: \
com.jcraft,\
com.jcraft.jsch,\
com.jcraft.jsch.jce,\
com.jcraft.jsch.jcraft,\
com.jcraft.jsch.jgss,\
com.jcraft.jzlib
我建议你使用 BndTools 来编辑 bnd.bnd 文件。 你可以从BndTool Installation. 安装 BndTools 插件到 Eclipse
选择你需要的包。
注意:由于它不会自动安装所有需要添加的依赖项(如果需要任何额外的 jar)。即我想使用依赖于 jzlib 的 jsch。所以我在 pom.xml 文件中添加了这两个条目。
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jzlib</artifactId>
<version>1.1.3</version>
</dependency>
希望这会有所帮助!请投票,以便我可以编写更多解决方案。
【讨论】:
以上是关于BndTools,如何添加非 OSGi JAR?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 bndtools 通过 Scala 创建 OSGi 包?
osgi (bndtools) 中的 Restlet 包无法启动。激活程序错误 com/sun/net/httpserver/HttpHandler
OSGi Felix 和 BndTools - 按名称加载类