-
19-09-2019 - |
题
我正在尝试在 Eclipse 中创建一个简单的插件。当我运行该应用程序时,我在日志文件中看到以下错误:
org.osgi.framework.BundleException:束org.xyactivator bundle org.xy的激活剂无效。
您对这个错误有什么想法吗?
解决方案
检查你的 build.properties
部分
如果它没有正确指定最终二进制结果中应该包含的内容,它将无法工作。检查 .class 文件是否位于 MANIFEST.MF 指定的位置。
从 日蚀地带, ,此错误消息的另一个原因:
如果您在日志中看到类似这样的消息
The activator org.example.FooActivator for bundle org.example.foo is invalid
, ,那么这通常意味着已经有
ClassNotFoundException
在调用 start() 方法之前,首先尝试加载该类。
彭古鲁 补充道:
当我尝试从激活器类的构造函数中的任何其他类创建新对象时,会发生错误。在激活器插件中创建对象不合法吗?
- 如果该类来自另一个尚未“激活”的插件,那可能是您的问题。
- 如果找不到该类,那么您的插件激活器也会失效。
基本建议:在中完成初始化可能会更好 start()
方法 的 Activator
而不是它的构造函数。
其他提示
我也面临同样的问题,同时从不同的工作区导入插件。基本上,它是捆绑类路径,其中框架查找,同时加载的类。当您导入到不同的工作区,请确保您更改类路径指向相应的位置,即类文件都存在哪里。
修改类路径尝试清洁和重新构建并重新运行之后。它应该work..hopefully ..
如果您有Eclipse工作区移动到一个新的路径,那么你应该使用项目 - >清理插件构建之前,你还是满足了这个问题。
OK,我不喜欢当队长很明显在这里,但我以前就犯了这个错误。当你忘记延长的BundleActivator也会发生这种情况。
我花了一些时间来解决这个问题。最后我注意到 ClassNotFoundExceptions 与我的代码不符,它们来自错误的(旧的)包。我检查了是否有其他插件扰乱了我的调试/导出,确实有,我自己的插件!
因此,如果您遇到此问题并且 CNFE 与您的代码不符,可以尝试一个简单的修复:
- 转到“安装新软件”
- 点击“已安装”
- 删除包/插件的所有实例并重新启动
这可能是因为我更改了插件 ID,使 Eclipse 将其视为新插件。
如果您感到沮丧和陷入困境,可以看看另一个好网站: http://www.eclipsezone.com/eclipse/forums/t99010.html
在我的情况下,没有此消息“活化剂..invalid”,但在接下来的例外有以捆绑ClassNotFound的例外是我没有改变的东西..
GUU(发布过一个解决方案)是我的英雄,之后的增加
Bundle-ManifestVersion: 2
到
Bundle-ManifestVersion: 3
一切工作:)
我得到了相同的异常。根本问题是一个ClassCastException。我的包需要org.osgi.core 4.3而春分发射使用4.2。
此致 罗兰
如果您在另一个包中的包之后命名一个包,也可能会发生这种情况。
所以:
- 如果你有
Bundle A
其中包含包org.my.package.name.function
, - 你创造
bundle B
有名字org.my.package.name.function
,- => 然后系统可能会在那里寻找激活器,但找不到任何激活器。
我发现了错误的原因。当我尝试激活类的构造函数创建任何其他类的新对象时发生错误。是不是合法的插件激活创建一个对象?
在我的情况下,这个例外是因为Eclipse自定义类加载器的无力解决和及时其他插件加载所有依赖类。我不是Eclipse的超级大师,所以也许这是我的错。
然而它是固定通过禁用插件的迟缓装载。在GUI上的概述的MANIFEST.MF
编辑取消选中的选项卡的当其类别中的一个被加载激活此插件。或直接在MANIFEST.MF
删除线
Bundle-ActivationPolicy: lazy
另一个队长显而易见的:如果你改变你的源文件的路径(例如SRC /为src / main / java目录),但忘记更新build.properties,编译总是会成功,但你的插件行不通
我有同样的错误,在我来说,我创建了自己的构造函数的参数。但我没有提供一个默认的构造函数。所以除去我的构造函数和所有内start()方法初始化后,它的工作就像风情万种。
我也遇到了同样的错误。对于束XX活化剂XX是无效的,并且ClassNotFoundException的。 我检查了插件\目录下,并不能找到类需要的。
- 因为没有包含所需类没有jar文件,仅存在对应的目录。 例如,不存在com.hh.jar,但只有com.hh目录。
因此,必须有一些错误有关创建com.hh.jar。
如果com.hh.jar参考其他插件,则还检查它们。
我通过编辑MANIFEST.MF解决了这个问题。 通过插件清单编辑器中打开它,在Runtime选项卡,在“导出包”添加需要的软件包。 并在“类路径”,添加需要的库,和“” (当前目录,重要)
我也运行到本isue当“捆定义”纯的jar文件。如果一些依赖得不到解决,或罐子依赖于更高的JAVA版比您正在使用的一个,激活器将无法启动,给上面的异常。的快捷方式,以找出是否这是问题是去除从捆类路径的罐子(清单的运行时间标签),并检查是否活化剂将正常运行。