java - 在 Eclipse 中将 JAR 嵌入到 OSGi 包中

标签 java eclipse eclipse-plugin osgi osgi-bundle

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

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

好的。除了我嵌入的 JAR 很小而且不太可能被我将在这个封闭系统上实现的任何其他东西使用,所以嵌入它要容易得多,这样用户只需要下载一个包(最终易于使用-用户至关重要)。所以我要打破常规并将其嵌入。

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

我检查了生成的最终捆绑 JAR 文件,第三方 JAR 按预期嵌套在内部(在根目录),但是当它尝试从该库导入对象时,它失败了。

下面包含我的(非常基本的)MANIFEST.MF。我错过了什么吗?除了将其列在 bundle-classpath 之外,我还需要将其列为导入包吗?我需要导出它吗(为什么?)?我误用了 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 文件夹中并直接编辑 list 文件来引用它,就好像它在根目录中一样(即使它确实是在包的根目录中,显然这没有用),我能够通过使用 Eclipse 的图形 list 编辑器来解决这个问题。

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

关于java - 在 Eclipse 中将 JAR 嵌入到 OSGi 包中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26870542/

相关文章:

java - 努力编写高效的代码

java - Eclipse 中的循环

android 4.0 中的 android.os.NetworkOnMainThreadException

eclipse - 如何在eclipse中删除谷歌登录按钮

java - eclipse 插件功能错误

java - 非 MVC 应用程序中的 Spring 验证

java - 在单元测试中使用多少个线程?

java - Eclipse调试插件: Access underlying java object from IJavaObject of JDT

java - Glassfish - 无法更新 http 端口。服务器关闭

java - 使用 Eclipse 创建 java 可执行文件