RCP: MANIFEST.MF, plugin.xml, build.properties三種文件的區別


在Eclipse插件開發中, MANIFEST.MF, plugin.xml, build.properties是三種最常見的文件,由於它們共享同一個編輯器(Plug-in Manifest Editor),經常會有插件開發者誤解、混淆了這三個文件的用途。我們來看看這三個文件有哪些區別。

 

1、在編輯器上的區別

我們來看看Plug-in Manifest Editor是什么樣子的:

 

上圖是manifest編輯器的Overview簽頁的項目。注意編輯器的底部,有多個簽頁。


其中,Overview、Dependencies、Runtime,三個簽頁是MANIFEST.MF文件的圖形化編輯器。

Extensions、Extension Points,兩個簽頁是plugin.xml文件的圖形化編輯器。

Build簽頁則是build.properties文件的圖形化編輯器。

最后的三個簽頁MANIFEST.MF、plugin.xml、build.properties分別為對應文件的文本編輯器。

 

2、功能上的區別

我們知道,靜態文本通常用來作為配置文件。

MANIFEST.MF對於Java程序員來說是個常見的文件(不知道的回去面壁),它用來標識當前jar包的各種屬性的,如果你做過“可雙擊啟動的jar包”,應該能想起這個文件。

MANIFEST.MF里有一般屬性,也有一些和其他體系約定俗稱的屬性,也可以添加自定義的屬性。

比如在插件開發里,一個插件項目的MANIFEST.MF基本會具備如下屬性:

 

有些插件開發者會疑惑。為什么同樣是一個jar包,有些會被Eclipse認同為bundle(不懂這個詞的插件開發者去面壁),有些只能認同為普通的jar。

這個MANIFEST.MF的內容就是關鍵了,普通的jar包是不會具備這些bundle信息的。

在Eclipse(具體來說是equinox)找到這個插件jar的時候,會讀取其MANIFEST.MF文件,以獲取其名稱,版本號,依賴關系,等。

然后完成我們所知的插件加載過程。

即是說,MANIFEST.MF是用來配置插件的元信息的,其屬性的名和值,需要符合OSGi規范。

OSGi以MANIFEST.MF為依據,來啟動插件,計算依賴性,決定約束(constraint)等等,其他的OSGi框架比如felix,也可以讀取識別它。

該文件的使用發生在插件加載之前。

 

plugin.xml是為Eclipse的擴展點和擴展服務的。

很多人混淆了擴展點和擴展的概念。

下圖所做的操作,相信插件開發人員都做過:

 

這一系列的完整的操作,我們應該稱之為“選擇了org.eclipse.ui.editors擴展點,並添加了一個擴展”

擴展點,即是Extension Point,擴展點本身其實不具備功能,它僅僅只是個“格式規范”,一個“schema”,本質上,它是個類DTD定義。

擴展,即是Extension,它是真正的配置項(XML格式),用戶根據擴展點的約束填入合適的值,以完成配置。

這里不會贅述一個擴展是如何生效的,有興趣的同學可以嘗試自己定義一個“擴展點”,然后完善它的exsd定義文件。

在代碼里查詢擴展點內容使用如下代碼:

Platform.getConfigurationElementsFor(String extensionPointId);

如此可知,plugin.xml是為了擴展點和擴展服務的,是Eclipse的專屬內容。它的使用發生在插件被加載之后。

 

build.properties,屬性文件相信大家並不陌生,插件在打包的過程中,需要提供給ant腳本一些變量,這些變量就記錄在build.properties文件中。

該文件會在插件或者產品導出的時候使用到。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM