我正在尝试在 eclipse 中创建一个简单的插件。当我运行应用程序时,我在日志文件中看到了这个错误:
org.osgi.framework.BundleException : 用于 bundle org.xy 的激活器用于 bundle org.xy 的激活器无效。
您对此错误有任何想法吗?
我正在尝试在 eclipse 中创建一个简单的插件。当我运行应用程序时,我在日志文件中看到了这个错误:
org.osgi.framework.BundleException : 用于 bundle org.xy 的激活器用于 bundle org.xy 的激活器无效。
您对此错误有任何想法吗?
检查你的build.properties
部分
如果它没有正确指定最终二进制结果中应该包含的内容,它将无法工作。检查 .class 文件是 MANIFEST.MF 所说的位置。
来自EclipseZone,此错误消息的另一个原因:
如果您在日志中看到一条消息,例如
The activator org.example.FooActivator for bundle org.example.foo is invalid
,那么这通常意味着
ClassNotFoundException
首先尝试加载该类,甚至在它到达 start() 方法之前。
penguru补充说:
当我尝试从激活器类的构造函数中的任何其他类创建新对象时会发生错误。在激活器插件中创建对象是否合法?
start()
基本建议:在方法而Activator
不是其构造函数中完成初始化可能会更好。
从不同的工作区导入插件时,我也遇到了同样的问题。基本上,它是框架在加载类时查找的包类路径。当您导入到不同的工作区时,请确保更改类路径以指向适当的位置,即类文件所在的位置。
修改类路径后,尝试清理并重新构建并重新运行。它应该工作..希望..
好吧,我讨厌在这里明显地成为队长,但我以前犯过这个错误。当您忘记扩展 BundleActivator 时,也会发生这种情况。
就我而言,有此消息“Activator ..invalid”,但在接下来的异常中,如果我没有更改某些内容,则捆绑中有 ClassNotFound 异常。
Guu(也发布了解决方案)是我的英雄,增加后
Bundle-ManifestVersion: 2
至
Bundle-ManifestVersion: 3
一切正常:)
我花了一些时间来解决这个问题。最后我注意到 ClassNotFoundExceptions 与我的代码不符,它们来自错误的(旧)包。我检查了是否有其他插件干扰了我的调试/导出,确实有,我自己的插件!
因此,如果您遇到此问题并且 CNFE 与您的代码不符,可以尝试一个简单的修复方法:
这可能是因为我更改了插件 ID,使 Eclipse 将其视为新插件。
如果您感到沮丧和卡住,另一个可以查看的好网站:http: //www.eclipsezone.com/eclipse/forums/t99010.html
如果您已将 eclipse 工作区移动到新路径,那么您应该在构建插件之前使用 project->clean,否则您会遇到这个问题。
我得到了同样的例外。根本问题是 ClassCastException。我的包需要 org.osgi.core 4.3,而 equinox 启动器使用 4.2。
问候罗兰
如果您在另一个包中的包之后命名包,也会发生这种情况。
所以:
Bundle A
其中包含的包org.my.package.name.function
,bundle B
用名字创建org.my.package.name.function
,
我找到了错误的原因。当我尝试从激活器类的构造函数中的任何其他类创建新对象时会发生错误。在 plugin 的 activator 中创建对象是否合法?
Another captain obvious: If you change the paths of your source files (e.g. src/ to src/main/java), but forget to update build.properties, the compilation will always succeed, but your plugin will never work.
我也遇到了同样的错误。捆绑 XX 的激活器 XX 无效,并且 ClassNotFoundException。我检查了 plugins\ 目录,但找不到所需的类。
-- 因为没有包含需要的类的jar文件,所以只有对应的目录。比如没有com.hh.jar,只有com.hh目录。
所以,创建 com.hh.jar 肯定有问题。
如果 com.hh.jar 引用了其他插件,那么也要检查它们。
我通过编辑 MANIFEST.MF 解决了这个问题。通过插件清单编辑器打开它,在运行时选项卡中,在“导出的包”中添加所需的包。并在“类路径”中,添加所需的库,以及“。” (当前目录,重要)
在我的情况下,这个异常是因为 Eclipse 自定义类加载器无法及时解析和加载来自其他插件的所有依赖类。我不是 Eclipse 超级大师,所以也许是我的错。
然而,它是通过禁用插件的延迟加载来修复的。在编辑器的概览选项卡上的GUI 中,取消选中加载其中一个类时激活此插件。或者直接在删除行MANIFEST.MF
MANIFEST.MF
Bundle-ActivationPolicy: lazy
我有同样的错误,在我的例子中,我用参数创建了自己的构造函数。但我没有提供默认构造函数。因此,在删除我的构造函数并在 start() 方法中初始化所有内容后,它就像魅力一样工作。
在“捆绑”普通 jar 文件时,我也遇到了这个问题。如果某些依赖项未解决,或者 jar 依赖于比您正在使用的版本更高的 JAVA 版本,则激活器将不会启动,并出现上述异常。找出这是否是问题的快速方法是从 bundle-classpath(清单的运行时选项卡)中删除 jar 并检查激活器是否会正确运行。