【发布时间】:2012-10-05 22:28:54
【问题描述】:
我使用 Eclipse Indigo 使用 OSGi Java 框架开发了一些包。有一个 Main Bundle,它依赖于其他 bundle 并且具有要运行的主程序。如果我尝试在 Eclipse 中运行所有包,一切正常,但如果我将每个包保存为 JAR 并在命令行中启动 OSGi 框架,我在尝试启动主包时遇到异常NoClassDefFoundError。找不到的类是依赖项。捆绑包的其余部分获得状态 ACTIVE,主捆绑包刚刚解决。
我已经创建了一个包含我正在使用的所有库(mysql 连接器等)的包,并且我正在将这个包导入到我需要这些库的每个包中。我不知道这是否是实现它的最佳方法。另外,我在我的应用程序中使用线程,其中一些使用来自不同包的方法,这可能是问题的根源吗?
有人知道我能做什么吗?我还必须在 Apache Karaf 中安装捆绑包,我得到了相同的结果。和每个bundle的起始等级有关系吗?
【问题讨论】:
-
你是如何导出你的 Bundle 的?
-
根据包我导出整个包或只是几个包,但对于两者我都使用 MANIFEST.MF。主包的这个文件是: Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Main Bundle-SymbolicName: MainBundle Bundle-Version: 1.0.0.qualifier Bundle-Activator: com.xaptum.messageprocessor.main.Activator Bundle-Vendor: 不管 Require-Bundle: XXXXXBundle;bundle-version="1.0.0", YYYYYBundle;bundle-version="1.0.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Import-Package: com.some.imported.package , org.osgi.framework;version="1.3.0"
-
我猜 Rohit 想问的是你如何将你的包导出到一个 jar 文件?!
-
是的,我已使用插件开发 > 可部署插件和片段将它们导出到 JAR 文件中。很抱歉对于这个误会。另外,我认为我的问题与在运行时加载 mysql jdbc 连接器有关。不知何故,它找不到库,所以我收到 NullPointerException,然后无法实例化对象,我收到 NoClassDefFoundError。这是一个相关链接,但我还没有找到解决方案:wiki.osgi.org/wiki/…
标签: java osgi bundle apache-felix apache-karaf