將Eclipse3.0開發(fā)的插件程序升級到Eclipse3.1經(jīng)常遇到的一個問題
Posted on 2005-12-03 17:10 nemo 閱讀(1297) 評論(0) 編輯 收藏 所屬分類: EclipseRCP/SWT/JFACE最近學習RCP,于是需要查看一些源碼。有些源碼在Eclipse3.0下一點問題都沒有,可是將Eclipse SDK更新到3.1后,好多源碼都報錯,無法運行。而且大多數(shù)是同一個錯誤。具體錯誤是在META-INF目錄下的MENIFEST.MF中出現(xiàn)的。如下圖所示:
改了半天也不知道是什么方面的原因。把鼠標放在出錯提示處,發(fā)現(xiàn)有如下圖所示的提示:
然后查找了大量資料,又用3.1版的Eclipse自動生成了MENIFEST.MF文件,看了一下開頭,比這個插件的開始處在Bundle-SymbolicName中多了這么一項:
Bundle-SymbolicName:Test; singleton:=true
那就將這句話加上吧!
滿以為這次應(yīng)該沒什么問題了,可誰知還是出錯。具體報的錯誤是這樣的:
上面說聲明擴展或擴展點的插件必須將"singleton"屬性設(shè)置為"true",查了所有的擴展和擴展點項,都沒有發(fā)現(xiàn)提示中所說的singleton屬性,也就當然不知道如何設(shè)置為"true"了。
后來只好一步一步來,重新創(chuàng)建一個插件工程,把原來的源代碼全部拷過去,手工添加所有的擴展和擴展點項(累呵!)最后終于找到了兩個非常細小的差別。相比3.0版本的MENIFEST.MF,3.1版的增加了下面兩項:
Bundle-ManifestVersion: 2
和
Bundle-Localization:plugin。將這兩項加入MENIFEST.MF文件之后,錯誤解決了?。。?BR>
究竟是哪一項導致上述錯誤呢?只去掉Bundle-ManifestVersion:2這一項后,發(fā)現(xiàn)錯誤重新出現(xiàn),而只去掉Bundle-Localization:plugin后,錯誤沒有出現(xiàn)。
所以我們在遇到上述問題時,可以做如下操作:
1.設(shè)置singleton:=true,如果仍然沒有解決問題:
2.添加Bundle-ManifestVersion:2
我就是這樣將錯誤修復的。但愿有類似經(jīng)歷的同胞不再受這個問題的困擾。
但是,由于對OSGI以及Eclipse底層的機制不了解,所以不清楚為什么會出現(xiàn)上述問題,以及為什么增加此行后就不再報錯。希望各位了解的能夠指點迷津!