我需要在我正在Eclipse中开发的OSGi包中嵌入第三方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会在你这样做时设置一些背景配置。
答案 0 :(得分:4)
不是将.JAR放在项目的src文件夹中,而是直接编辑清单文件以引用它,就像它在根目录中一样(即使它确实是在bundle的根目录中,显然这不起作用),我能够通过使用Eclipse的图形清单编辑器来解决这个问题。
答案 1 :(得分:0)
您需要一个' Export-Package'条目说明哪些包可用于其他插件。
您可以在Eclipse MANIFEST.MF编辑器中的' Runtime'标签,'导出的包'表。