本質延伸點可讓本質作者將他們的本質實作登錄在某符號名稱之下,再從工作區中,利用這個符號名稱來尋找和配置本質。符號名稱是本質延伸的 ID。在定義本質延伸規格時,建議使用者在 "name" 屬性中指定有意義的值,此屬性描述使用者的用意,且可能讓其他使用者看見。
本質可以指定和其他本質的關係限制。"one-of-nature" 限制指出給定的本質集在任何給定的時間裡最多只有一個本質存在於專案中。這個限制強化了不相容的本質間相互的排外性。"requires-nature" 限制指定另一個本質的相依關係。 新增本質至專案時,也必須新增所有需要的本質。這些本質保證用一定的方式配置以及解除配置, 這樣他們所需的本質一律在他們被配置前配置而在他們被解除配置後才解除。 因為這個原因,在本質之間不允許循環的相依關係。
如果變更違反了任何之前滿足的限制,將無法由專案中新增或移除本質。如果本質已配置於這個專案中,之後才發現不滿足它的限制,則所有需要它的本質會被標示為停用,但是還是存在於專案中。這有可能發生,例如,所需的本質在安裝過程中遺漏。安裝過程中遺漏的本質以及與相依關係循環有關的本質都被標示為停用。
本質也可以指定由它們配置的增量專案建置器(如果有的話)。根據這個資訊, 工作區將確定僅在對應的本質出現,而且在要建置的專案啟用了它時, 才會執行建置器。如果將本質由專案中移除,但是本質的解除配置方法無法移除對應的建置器, 工作區將自動由規格中移除那些建置器。不允許兩個本質在它們的標記中指定同一個增量專案建置器。
本質也具有不容許在與它們相關聯的專案上建立鏈結資源的能力。藉由將 allowLinking
屬性設成 "false",本質可以宣告絕不應該建立鏈結資源。
這是第 2.1 版新增的功能。
從 3.1 版開始,本質可宣告任意內容類型的親緣性,影響工作區檔案的內容類型判定方式。發生衝突時(有兩個以上的內容類型同樣適用於給定的檔案), 將選擇與相對應的專案所配置的任何本質具有親緣性的內容類型。
<!ELEMENT extension (runtime , (one-of-nature | requires-nature | builder | content-type)* , options?)>
<!ATTLIST extension
point CDATA #REQUIRED
id CDATA #REQUIRED
name CDATA #IMPLIED>
<!ATTLIST run
class CDATA #REQUIRED>
<!ELEMENT parameter EMPTY>
<!ATTLIST parameter
name CDATA #REQUIRED
value CDATA #REQUIRED>
<!ELEMENT one-of-nature EMPTY>
<!ATTLIST one-of-nature
id CDATA #REQUIRED>
<!ELEMENT requires-nature EMPTY>
<!ATTLIST requires-nature
id CDATA #REQUIRED>
<!ELEMENT builder EMPTY>
<!ATTLIST builder
id CDATA #REQUIRED>
<!ELEMENT options EMPTY>
<!ATTLIST options
allowLinking (true | false) >
<!ELEMENT content-type EMPTY>
<!ATTLIST content-type
id CDATA #REQUIRED>
如果這些延伸定義於 ID 為 "com.xyz.coolplugin" 的外掛程式,這些本質的完整名稱為 "com.xyz.coolplugin.fireNature"、"com.xyz.coolplugin.waterNature" 以及 "com.xyz.coolplugin.snowNature"。<extension id=
"fireNature"
name=
"Fire Nature"
point=
"org.eclipse.core.resources.natures"
>
<runtime>
<run class=
"com.xyz.natures.Fire"
/>
</runtime>
<one-of-nature id=
"com.xyz.stateSet"
/>
<options allowLinking=
"false"
/>
</extension>
<extension id=
"waterNature"
name=
"Water Nature"
point=
"org.eclipse.core.resources.natures"
>
<runtime>
<run class=
"com.xyz.natures.Water"
/>
</runtime>
<one-of-nature id=
"com.xyz.stateSet"
/>
</extension>
<extension id=
"snowNature"
name=
"Snow Nature"
point=
"org.eclipse.core.resources.natures"
>
<runtime>
<run class=
"com.xyz.natures.Snow"
>
<parameter name=
"installBuilder"
value=
"true"
/>
</run>
</runtime>
<requires-nature id=
"com.xyz.coolplugin.waterNature"
/>
<builder id=
"com.xyz.snowMaker"
/>
</extension>
Copyright (c) 2002, 2005 IBM Corporation and others.
All
rights reserved. 本程式與隨附的資料依照 Elipse Public License 1.0 版此次發行所隨附的條款而提供,
可以在以下網址取得:http://www.eclipse.org/legal/epl-v10.html