本質延伸點可讓本質作者將他們的本質實作登錄在某符號名稱之下,再從工作區中,利用這個符號名稱來尋找和配置本質。 符號名稱是本質延伸的 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.
這個程式和檢附的資料是遵循這項分送檢附的 Eclipse Public License 1.0 版的條款而提供的,
請造訪下列網址來取得此條款:http://www.eclipse.org/legal/epl-v10.html