繁体   English   中英

将JAR嵌入Eclipse中的OSGi Bundle中

[英]Embedding JARs in an OSGi Bundle in Eclipse

我需要在我正在Eclipse中开发的OSGi包中嵌入第三方JAR文件。 我做了很多搜索和阅读,我一遍又一遍地看到同样的事情:

  1. 我真的不应该这样做。 这不是OSGi做事的“方式”。
  2. 这实际上很容易做到。 只需将JAR嵌入到bundle的根目录中Bundle-ClassPath: ., jar_filename.jar在清单中指定Bundle-ClassPath: ., jar_filename.jar

好的。 除了JAR我嵌入很小,不太可能被我在这个封闭系统上实现的任何其他东西使用,因此嵌入它要容易得多,因此用户只需下载一个捆绑包(易于使用) - 用户至关重要)。 所以我要反对惯例并嵌入它。

现在,在IDE中,一切都是犹太洁食。 我将JAR放在我的Eclipse项目的src文件夹中并配置了项目的构建路径,使用“add jar”按钮(不是“添加外部jar”,因为我认为将使用绝对路径)包含它“配置构建路径”对话框。 我还将Bundle-ClassPath行添加到了我的清单文件中。 在IDE中,我的所有导入都解析得很好(因为它在构建路径中),但是当我将它作为一个包(默认选项)导出时,错误日志显示导入无法解析。

我检查了生成的最终bundle JAR文件,并且第三方JAR按预期嵌套在(在根目录下),但是一旦它尝试从该库导入对象,它就会失败。

下面是我(非常基本的) MANIFEST.MF 我错过了什么吗? 除了将它列在bundle-classpath之外,我是否需要将其列为import-package? 我需要导出它(为什么?)? 我错误地使用了bundle-classpath吗? 我是否需要做一些不同的事情,因为我正在使用Eclipse?

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: ZWave Demo
Bundle-SymbolicName: com.wbarlow.zwavedemo
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.wbarlow.zwavedemo.internal.Activator
Bundle-Vendor: WBARLOW
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Import-Package: org.osgi.framework;version="1.3.0"
Bundle-ClassPath: .,
 rxtx-2.1.7.jar

编辑:我通过使用GUI重新完成所有操作来解决这个问题,而不是直接编辑.MF文件。 我猜Eclipse会在你这样做时设置一些背景配置。

而不是将.JAR放在项目的src文件夹中并直接编辑清单文件以引用它,就好像它在根目录中一样(即使它确实在捆绑的根目录中,显然这不起作用),我能够通过使用Eclipse的图形清单编辑器来解决这个问题。

  1. 将外部JAR放在Eclispe项目的根目录中。
  2. 在Eclipse中打开META-INF / MANIFEST.MF文件。
  3. 在“运行时”选项卡上,选择“添加...”并添加外部JAR。

您需要一个“导出包”条目来说明哪些包可用于其他插件。

您可以在“运行时”选项卡上的Eclipse MANIFEST.MF编辑器中指定“导出的包”表。

暂无
暂无

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

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