将JAR嵌入Eclipse中的OSGi Bundle中

时间:2014-11-11 17:14:31

标签: java eclipse eclipse-plugin osgi osgi-bundle

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

  1. 我真的不应该这样做。这不是OSGi做事的“方式”。
  2. 这实际上很容易。只需将JAR嵌入到捆绑包的根目录中,然后在清单中指定Bundle-ClassPath: ., jar_filename.jar
  3. 好。除了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会在你这样做时设置一些背景配置。

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

您需要一个' Export-Package'条目说明哪些包可用于其他插件。

您可以在Eclipse MANIFEST.MF编辑器中的' Runtime'标签,'导出的包'表。