專案本質

識別碼:org.eclipse.core.resources.natures

說明:工作區支援專案本質(簡稱「本質」)的觀念。 本質建立生命週期行為與專案的關聯性。 本質使用定義在 org.eclipes.core.resources.IProject 中的 setDescription 方法安裝在各個專案上。 當開啟專案時,即會自動配置它們,當關閉專案時,即會解除配置它們。 例如,Java 本質可能安裝 Java 建立器,並且當新增至專案時執行其他專案的配置。

本質延伸點可讓本質作者將他們的本質實作登錄在某符號名稱之下,再從工作區中,利用這個符號名稱來尋找和配置本質。 符號名稱是本質延伸項目的 ID。當定義本質延伸項目時, 使用者最好在用來識別其意義且使用者可能會見到的 "name" 屬性中包括可供人類閱讀的值。

本質可以指定和其它本質的關係限制。 "one-of-nature" 限制指出給定的本質集在任何給定的時間裡最多只有一個本質存在於專案中。 這個限制強化了不相容的本質間相互的排外性。"requires-nature" 限制指定另一個本質的相依性。 新增本質至專案時,也必須新增所有需要的本質。 這些本質保證用一定的方式配置以及解除配置, 這樣他們所需的本質一律在他們被配置前配置而在他們被解除配置後才解除。 因為這個原因,在本質之間不允許循環的相依性。

如果變更違反了任何之前滿足的限制,將無法由專案中新增或移除本質。 如果本質已配置於這個專案中,之後才發現不滿足它的限制,則所有需要它的本質會被標示為停用,但是還是存在於專案中。 這有可能發生,例如,所需的本質在安裝過程中遺漏。安裝過程中遺漏的本質以及與相依性循環有關的本質都被標示為停用。

本質也可以指定由它們配置的漸進式專案建立器(如果有的話)。根據這個資訊, 工作區將確定僅在對應的本質出現,而且在要建置的專案啟用了它時, 才會執行建立器。如果將本質由專案中移除,但是本質的解除配置方法無法移除對應的建立器, 工作區將自動由規格中移除那些建立器。不允許兩個本質在它們的標記中指定同一個漸進式專案建立器。

本質也具有不容許在與它們相關聯的專案上建立鏈結資源的能力。藉由將 allowLinking 屬性設成 "false",本質可以宣告絕不應該建立鏈結資源。 這是第 2.1 版新增的功能。

配置標記:

   <!ELEMENT extension (runtime , (one-of-nature | requires-nature | builder)* , options?)>

   <!ATTLIST extension
     point CDATA #REQUIRED
     id    CDATA #IMPLIED
     name  CDATA #IMPLIED
   >

   <!ELEMENT runtime (run)>

   <!ELEMENT run (parameter*)>

   <!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)
   >

範例:以下是三個本質配置的範例。 waterNature 和 fireNature 屬於同一個互斥集,所以它們無法同時存在於同一個專案中。 snowNature 需要 waterNature,所以在遺漏 waterNature 的專案上將停用 snowNature。 因此,自然地隨後將無法在具有 fireNature 的專案上啟用 snowNature。 fireNature 亦不容許建立鏈結資源。

 
   <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> 

如果這些延伸項目定義於 ID 為 "com.xyz.coolplugin" 的外掛程式,這些本質的完整名稱為 "com.xyz.coolplugin.fireNature"、"com.xyz.coolplugin.waterNature" 以及 "com.xyz.coolplugin.snowNature"。

API 資訊:class 屬性值必須代表 org.eclipse.core.resources.IProjectNature 的實作者。 本質定義可以使用 org.eclipse.core.resources.IProjectNatureDescriptor 介面來查驗。 您可以在 org.eclipse.core.resources.IWorkspace 上使用 getNatureDescriptor(String)getNatureDescriptors() 方法,來取得描述子物件。

提供的實作:平台本身沒有任何預先定義的本質。 特定產品安裝可能會依需要而含有本質。

Copyright (c) 2003 IBM Corporation and others. All rights reserved. 這個程式和伴隨的素材可以根據伴隨這個分送,而且可在 http://www.eclipse.org/legal/cpl-v10.html 中取得的 Common Public License v1.0 的條款來使用