Eclipse插件升級(jí)后不正常的問題解決方法(3.3.0版本)
Eclipse插件問題是比較常見的問題,下面看看最近vwpolo遇到的有關(guān)Eclipse插件的一些苦惱:
最近同事被一個(gè)問題困惱了很久,讓我?guī)兔聪?問題是這樣的,我們的平臺(tái)是基于Eclipse RCP 3.3.0,將每個(gè)功能模塊作為一個(gè)插件工程,系統(tǒng)提供了基于Http的自動(dòng)更新插件的功能,要求在插件更新完成后將舊版本刪除掉(我們自己寫的版本比較方法),本來一切運(yùn)行正常,但是負(fù)責(zé)部署的同事將插件系統(tǒng)的版本號(hào)升級(jí)成4段,比如以前的版本組成是“主版本號(hào).次版本號(hào).內(nèi)部版本號(hào)”現(xiàn)在發(fā)展到“主版本號(hào).次版本號(hào).內(nèi)部版本號(hào).構(gòu)建版本號(hào)”比如將"3.0.0100"升級(jí)到"3.0.0100.1",這時(shí)候自動(dòng)刪除舊插件的功能就運(yùn)行的不正常,比如插件中有個(gè)主插件版本號(hào)為3.0.0100.9啟動(dòng)后可以刪除版本號(hào)為"3.0.0100.8"的插件,而"3.0.0100.11"的插件卻無法刪除"3.0.0100.9"的插件。
其實(shí)這和OSGI的版本機(jī)制有關(guān)系,Eclipse內(nèi)部插件版本標(biāo)記和比較是通過"org.eclipse.osgi.*"插件中的Version.java完成的,Version 中的字段major表示主版本號(hào)、minor表示次版本號(hào)、micro表示微型版本號(hào)(內(nèi)部版本號(hào)),這三個(gè)字段的類型都是int型的,而Version中的qualifier用來表示構(gòu)建版本號(hào),類型是字符串,當(dāng)時(shí)如果第四位構(gòu)建版本號(hào)如果是純數(shù)字的話,Eclipse會(huì)自動(dòng)格式化一下,再進(jìn)行比較,比如比較08和10,格式之后變成8 vs 10,通過字符串的compare方法會(huì)得到8比10大7,當(dāng)然它就會(huì)認(rèn)為"oss.client_1.1.1.08"的版本要比"oss.client_1.1.1.10"高,這可能是Eclipse 3.3.0 版本的一個(gè)Bug,我在Eclipse 的3.3.2中沒有發(fā)現(xiàn)這個(gè)問題,在Eclipse 3.4和 3.5也已經(jīng)修復(fù)好了,如果你使用的是Eclipse 3.3.0并且也有這樣的需求的話要小心了。
【編輯推薦】