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

使用 Maven、OSGi 和 Bndtools

OSGi Felix 和 BndTools - 按名称加载类

Liferay7 BPM门户开发之38: OSGi Bndtools开发入门

OSGI 和 JSF 如何协同工作?