bundle的激活器无效
我正试图在eclipse中创建一个简单的插件。 当我运行应用程序时,我在日志文件中看到此错误:
org.osgi.framework.BundleException:bundle org.xy的bundle org.xyActivator的激活器无效。
你对这个错误有任何想法吗?
检查build.properties
部分
如果它没有正确指定最终二进制结果中应该包含的内容,则它将不起作用。 检查.class文件是MANIFEST.MF所说的。
来自EclipseZone ,此错误消息的另一个原因:
如果你在日志中看到一条消息就像
The activator org.example.FooActivator for bundle org.example.foo is invalid
,这通常意味着在它甚至到达start()方法之前,已经有一个
ClassNotFoundException
尝试加载该类。
penguru补充道:
当我尝试从激活器类的构造函数中的任何其他类创建新对象时,会发生错误。 在激活器插件中创建对象不合法吗?
- 如果该类来自另一个尚未“激活”的插件,则可能是您的问题。
- 如果找不到该类,那么也会使插件激活器失效。
基本建议:在Activator
的start()
方法而不是构造函数中完成初始化可能会更好。
从不同的工作区导入插件时我也遇到了同样的问题。 基本上,它是在加载类时框架查找的bundle类路径。 导入到其他工作空间时,请确保将类路径更改为指向适当的位置,即类文件所在的位置。
修改类路径后,尝试清理并重新构建并重新运行。 它应该工作..希望……
如果您已将eclipse工作区移动到新路径,那么您应该在插件构建之前使用project-> clean,否则您将遇到此问题。
好吧,我不想在这里明显成为队长,但我之前犯过这个错误。 当您忘记扩展BundleActivator时也会发生这种情况。
我花了一些时间来解决这个问题。 最后我注意到ClassNotFoundExceptions与我的代码不一致,它们来自错误的(旧)包。 我检查是否有一些其他插件搞砸了我的调试/导出,确实有,我自己的插件!
所以,如果你面对这个并且CNFE不符合你的代码,那么这是一个简单的解决方案:
- 转到“安装新软件”
- 点击“已安装”
- 删除包/插件的所有实例并重新启动
可能这是因为我更改了插件ID,使Eclipse将其视为新插件。
如果你感到沮丧和困难,另一个好看的网站: http : //www.eclipsezone.com/eclipse/forums/t99010.html
在我的情况下有这个消息“Activator ..invalid”但在接下来的例外情况下,捆绑包中的ClassNotFoundexception是我没有改变的东西..
Guu(也是一个解决方案)是我的英雄,在增加之后
Bundle-ManifestVersion: 2
至
Bundle-ManifestVersion: 3
一切正常:)
我得到了同样的例外。 潜在的问题是ClassCastException。 我的包需要org.osgi.core 4.3,而equinox启动器使用4.2。
关心罗兰
如果在另一个包中的包之后命名一个包,也会发生这种情况。
所以:
- 如果你有包含
org.my.package.name.function
包的Bundle A
, - 并使用名称
org.my.package.name.function
创建bundle B
- =>然后系统可以在那里寻找激活器,而不是找到任何激活器。
我找到了错误的原因。 当我尝试从激活器类的构造函数中的任何其他类创建新对象时发生错误。 在插件激活器中创建对象不合法吗?
在我的例子中,这个exception是因为Eclipse自定义类加载器无法及时解析和加载来自其他插件的所有依赖类。 我不是Eclipse超级大师所以也许这是我的错。
但是它通过禁用延迟加载插件来修复。 在MANIFEST.MF
编辑器的“ 概述”选项卡上,取消选中在加载其中一个类时激活此插件 。 或者直接在MANIFEST.MF
删除行
Bundle-ActivationPolicy: lazy
另一位队长显而易见:如果你改变源文件的路径(例如src / to src / main / java),但忘记更新build.properties,编译将始终成功,但你的插件永远不会工作。
我有同样的错误,在我的情况下,我创建了自己的带参数的构造函数。 但我没有提供默认构造函数。 因此,在删除我的构造函数并在start()方法中初始化all之后,它就像charme一样工作。
我也遇到了同样的错误。 bundle XX的激活器XX无效,ClassNotFoundException。 我检查了plugins \目录,找不到所需的类。
– 因为没有包含所需类的jar文件,所以只有相应的目录。 例如,没有com.hh.jar,只有com.hh目录。
因此,创建com.hh.jar肯定有问题。
如果com.hh.jar引用其他插件,那么也检查它们。
我通过编辑MANIFEST.MF解决了这个问题。 通过Plug-in Manifest Editor打开它,在运行时选项卡中,在“Exported Packages”中添加所需的包。 并在“类路径”中,添加所需的库,“。” (当前目录,重要)
当’捆绑’普通的jar文件时,我也遇到了这个问题。 如果某些依赖项未解析,或者jars依赖于比您正在使用的更高的JAVA版本,则激活器将无法启动,从而产生上述exception。 找出这是否是问题的快速方法是从bundle-classpath(清单的运行时选项卡)中删除jar并检查激活器是否可以正确运行。