【问题标题】:The Activator X for bundle Y is invalid, caused by ClassNotFoundException: X捆绑包 Y 的激活器 X 无效,由 ClassNotFoundException: X 引起
【发布时间】:2011-10-03 17:42:53
【问题描述】:

在 Eclipse 中启动我的 OSGi 应用程序时,出现以下错误:

org.osgi.framework.BundleException: The activator org.pathvisio.sbgn.SbgnPlugin for bundle org.pathvisio.sbgn is invalid
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:157)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:751)
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:352)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:370)
    at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1068)
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:557)
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:464)
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:248)
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:445)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
    at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337)
Caused by: java.lang.ClassNotFoundException: org.pathvisio.sbgn.SbgnPlugin
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:494)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:398)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:326)
    at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:231)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:150)
    ... 10 more

这似乎与以下问题相同: The activator for bundle is invalid

但是,无论我尝试什么,我都会不断收到同样的错误。即使我将 Activator 类的名称更改为其他名称,它仍然给我使用旧类名称时完全相同的错误。

显然 eclipse 正在缓存一些东西,但我不知道是什么或为什么。 我尝试重新启动 eclipse,并在我的工作区中重建所有项目,但没有任何帮助。

这是我的 MANIFEST.MF:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: org.pathvisio.sbgn
Bundle-SymbolicName: org.pathvisio.sbgn
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: org.pathvisio.sbgn.Activator
Bundle-ClassPath: lib/activation.jar,
 lib/google-collect-snapshot-20090211.jar,
 lib/jaxb-api.jar,
 lib/jaxb-impl.jar,
 lib/jaxb-xjc.jar,
 lib/jaxb1-impl.jar,
 lib/jsr173_1.0_api.jar,
 lib/org.sbgn.jar
Export-Package: org.pathvisio.sbgn
Require-Bundle: com.springsource.org.jdom;bundle-version="1.1.0",
 org.pathvisio.core;bundle-version="2.0.11",
 org.bridgedb;bundle-version="1.1.0",
 org.pathvisio.gui;bundle-version="2.0.11",
 org.pathvisio.desktop;bundle-version="2.0.11",
 org.bridgedb.bio;bundle-version="1.1.0"
Import-Package: org.osgi.framework;version="1.5.0"

如您所见,我重命名了激活器类,但它仍然使用我之前指定的类名报告错误。

【问题讨论】:

  • Eclipse 是否可能要求激活器以插件/项目命名?这可以解释为什么它使用相同的名称,即使您更改了激活器。您是否尝试过将您的捆绑包与另一个 OSGi 容器(Virgo 或 Felix)一起使用?

标签: eclipse osgi


【解决方案1】:

将 ., 添加到 Bundle-classpath 并再次检查。它应该工作。

【讨论】:

    【解决方案2】:

    我在重命名我的 Activator 类的包后遇到了这个问题。对于遇到它的其他人,eclipse 已经更新了 MANIFEST.MF 中对 Activator 的引用,但没有在 plugin.xml 中更新。就我而言,plugin.xml 指向旧应用程序

      <extension id="application" point="org.eclipse.core.runtime.applications">
      <application>
         <run class="old.app.Application">
         </run>
      </application>
    

    所以更新了 plugin.xml,一切又重新开始了。

    【讨论】:

      【解决方案3】:

      Eclipse 确实缓存了一些东西!转到您的启动配置并打开Settings 选项卡。选择选项Clear the configuration area before launching 并尝试再次运行您的 OSGi 应用程序!

      【讨论】:

      • @amarillion 你能发布你的激活器和 MANIFEST.MF 吗?你真的启动了一个 OSGi 应用程序吗?不是 Eclipse 应用程序?
      • 我发布了我的 MANIFEST.MF。是的,它肯定会作为 OSGi 应用程序启动
      • 您的激活器看起来不错。你能发布激活器类吗?
      【解决方案4】:

      没有链式异常吗?一个原因是你的包没有导入 org.osgi.framework 包。因此,您的激活器的类加载失败,因为您的包类加载器无法加载 org.osgi.framework.BundleActivator。

      【讨论】:

      • 我编辑了我的问题以显示链接异常。好像找不到 Activator 类本身。我肯定是在导入 org.osgi.framework,所以这不是问题
      • 你的激活器类在哪里?我看到捆绑类路径上只列出了嵌套的 jar。所以不会加载主包 jar 中的任何类!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多