【问题标题】:OSGi bundles outside EclipseEclipse 之外的 OSGi 包
【发布时间】: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


【解决方案1】:

好的,我发现了问题。 Eclipse 将参数org.osgi.framework.bootdelegation 默认设置为 *,但所有其他 OSGi 框架都没有。

我现在正在使用 Apache Karaf,并且我已经将它位于 etc/ 中的 config.properties 更改为默认值 (org.apache.karaf.jaas.boot,sun.,com.sun.,javax.transaction,javax.transaction.*) 到 *.这使它工作,但我仍在尝试识别需要加载的确切库,因为不鼓励将此参数设置为 *。

欲了解更多信息:http://wiki.osgi.org/wiki/Why_does_Eclipse_find_javax.swing_but_not_Felix%3F

谢谢,我希望这对其他人有所帮助,

【讨论】:

    猜你喜欢
    • 2012-02-11
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 2015-12-23
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    相关资源
    最近更新 更多