2011-10-03 51 views
2

当开始在Eclipse中我的OSGi应用程序,我得到以下错误:激活器X的条Y是无效的,造成的ClassNotFoundException:X

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类的名称更改为其他名称,仍然会使用旧的类名给出完全相同的错误。

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

这里是我的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" 

正如你可以看到我改名为激活器类,但它的使用我先前指定的类名仍然报告错误。

+0

是否有可能Eclipse需要在插件/项目后命名激活器?这将解释为什么它使用相同的名称,即使您更改了激活器。你有没有尝试过使用你的捆绑与另一个OSGi容器(处女座或费利克斯)? – TMN

回答

0

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

+0

良好的提示,但不够好......它仍然无法正常工作,甚至不会改变...... – amarillion

+0

@amarillion你可以发布你的催化剂和MANIFEST.MF吗?你真的启动一个OSGi应用程序?不是Eclipse应用程序? – Tim

+0

我发布了我的MANIFEST.MF。是的,它肯定会作为OSGi应用程序启动 – amarillion

0

有没有链式异常?一个原因是你的包不会导入org.osgi.framework包。所以你的激活器的类加载失败,因为你的bundle类加载器不能加载org.osgi.framework.BundleActivator。

+0

我编辑了我的问题以显示链式异常。它看起来像激活类本身无法找到。我肯定会导入org.osgi.framework,所以这不是问题 – amarillion

+0

捆绑包中的哪个部分是激活器类?我看到只有嵌套的jar被列在bundle类路径上。所以主bundle中的任何类都不会被加载! –

6

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

1

重命名我的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中,一切都重新开始了。

相关问题