最近学习RCP,于是需要查看一些源码。有些源码在Eclipse3.0下一点问题都没有,可是将Eclipse SDK更新到3.1后,好多源码都报错,无法运行。而且大多数是同一个错误。具体错误是在META-INF目录下的MENIFEST.MF中出现的。如下图所示:
o_Eclipse3.0-3.1-6.bmp
改了半天也不知道是什么方面的原因。把鼠标放在出错提示处,发现有如下图所示的提示:
o_Eclipse3.0-3.1-11.bmp

然后查找了大量资料,又用3.1版的Eclipse自动生成了MENIFEST.MF文件,看了一下开头,比这个插件的开始处在Bundle-SymbolicName中多了这么一项:
Bundle-SymbolicName:Test; singleton:=true
那就将这句话加上吧!
o_Eclipse3.0-3.1-33.bmp

满以为这次应该没什么问题了,可谁知还是出错。具体报的错误是这样的:

Eclipse3.0-3.1-222.bmp

上面说声明扩展或扩展点的插件必须将"singleton"属性设置为"true",查了所有的扩展和扩展点项,都没有发现提示中所说的singleton属性,也就当然不知道如何设置为"true"了。
后来只好一步一步来,重新创建一个插件工程,把原来的源代码全部拷过去,手工添加所有的扩展和扩展点项(累呵!)最后终于找到了两个非常细小的差别。相比3.0版本的MENIFEST.MF,3.1版的增加了下面两项:
Bundle-ManifestVersion: 2

Bundle-Localization:plugin。将这两项加入MENIFEST.MF文件之后,错误解决了!!!
o_Eclipse3.0-3.1-55.bmp
究竟是哪一项导致上述错误呢?只去掉Bundle-ManifestVersion:2这一项后,发现错误重新出现,而只去掉Bundle-Localization:plugin后,错误没有出现。
所以我们在遇到上述问题时,可以做如下操作:
1.设置singleton:=true,如果仍然没有解决问题:
2.添加Bundle-ManifestVersion:2
我就是这样将错误修复的。但愿有类似经历的同胞不再受这个问题的困扰。
但是,由于对OSGI以及Eclipse底层的机制不了解,所以不清楚为什么会出现上述问题,以及为什么增加此行后就不再报错。希望各位了解的能够指点迷津!




只有注册用户登录后才能发表评论。


网站导航:
 

posts - 21, comments - 74, trackbacks - 0, articles - 3

Copyright © nemo