【问题标题】:Eclipse OSGi SystemBundleActivator vs BundleActivatorEclipse OSGi SystemBundleActivator 与 BundleActivator
【发布时间】:2023-03-10 03:41:01
【问题描述】:

我有一个基于 OSGi (Apache Felix) 的 Eclipse 项目。这取决于org.eclipse.osgi。一旦我启动它,就会发生以下异常:

Auto-properties install: file:C:\programs\eclipse\plugins \org.eclipse.osgi_3.9.1.v20140110-1610.jar (java.lang.IllegalArgumentException: Start level must be greater than zero.)
java.lang.ClassCastException:   org.eclipse.osgi.framework.internal.core.SystemBundleActivator cannot be cast to   org.osgi.framework.BundleActivator
ERROR: Bundle org.eclipse.osgi [2] Error starting file:C:\programs\eclipse\plugins\org.eclipse.osgi_3.9.1.v20140110-1610.jar   (org.osgi.framework.BundleException: Activator start error in bundle org.eclipse.osgi [2].)
    at org.apache.felix.framework.Felix.createBundleActivator(Felix.java:4342)
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:2147)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2070)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1297)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)
at java.lang.Thread.run(Thread.java:744)

所以org.eclipse.osgi Bundle 内部似乎存在问题。由于我无法更改捆绑包源代码,如何避免此错误?

【问题讨论】:

    标签: java eclipse osgi apache-felix


    【解决方案1】:

    org.eclipse.osgi 本身就是一个 OSGi 框架。我认为你不能在 felix 框架上运行它。因此,如果您真的需要 org.eclipse.osgi 的功能,最好将它也用作 OSGi 框架。那么它应该会更好地工作。

    顺便说一句。您在这里面临的确切问题是 felix 已经定义了 BundleActivator 接口并且导出是作为一个包。 org.eclipse.osgi 也嵌入了这个接口并使用它自己的版本。所以 Exception 真正说的是 SystemBundleActivator 没有实现 felix 的 BundleActivator 接口。

    【讨论】:

    • 我同意如果有人依赖 Equinox,他们可能需要在 Equinox 中运行。在某些情况下,您可以使用 Equinox 补充包 (org.eclipse.equinox.supplement) 在另一个框架(如 Felix)下运行此类代码。该捆绑包导出 Equinox 作为框架时通常会导出的各种 API。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2012-03-07
    • 2012-12-23
    • 2013-02-10
    相关资源
    最近更新 更多