项目性质

标识:org.eclipse.core.resources.natures

描述:工作区支持项目性质(或简称为“性质”)的概念。性质使生命周期行为与项目相关联。性质是根据项目用在 org.eclipes.core.resources.IProject 上定义的 setDescription 方法安装的。它们是在打开项目时自动配置的,并且在关闭项目时取消配置。例如,Java 性质可安装 Java 构建器并且在添加至项目时执行其它项目配置

性质扩展点允许性质编写者使用符号名注册他们的性质实现,然后,在工作区中使用此符号名来查找和配置性质。该符号名是性质扩展的标识。当定义性质扩展时,鼓励用户在“name”属性中包含人们可阅读的值,“name”属性标识它们的意义,并且可能显示给用户。

性质可以指定与其它性质的关系约束。“其中一个性质”约束指定在给定的任何时间,一个项目上最多可以存在属于给定性质集的一个性质。这在互相不兼容的性质之间强制使用互斥。“需要性质”约束指定对另一性质的依赖性。当将性质添加至项目时,还必须添加所有必需的性质。保证以这样的方法配置和取消配置这些性质:总是在配置这些性质之前配置它们必需的性质并在取消配置这些性质之后取消配置它们必需的性质。因此,不允许性质之间存在循环依赖性。

如果更改将违反先前满足的任何约束,则不能将性质添加至项目或从项目中除去性质。 如果在项目上配置了性质,但是后来发现未满足其约束,则会将该性质以及需要它的所有性质标记为禁用, 但是它们会保留在项目中。例如,在必需的性质从安装中丢失时就可能会发生这种情况。还会将安装中丢失的性质以及依赖性循环中涉及的性质标记为禁用。

性质还可以指定哪些增量项目构建器(如果有的话)是由它们配置的。利用此信息,工作区将确保构建器将只在它们相应的性质存在并且在正在构建的项目上启用它们时运行。如果从项目中除去了性质,但是性质的取消配置方法未能除去其相应的构建器,则工作区将自动从构建规范中除去那些构建器。不允许两个性质在它们的标记中指定同一个增量项目构建器。

性质还具有禁止对它们与之相关联的项目创建链接的资源的能力。通过将 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,因此 snowNature 在缺少 waterNature 的项目上将禁用。自然可以得知在具有 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>

如果在具有标识“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.IWork查看编辑器的更新 上的方法 getNatureDescriptor(String)getNatureDescriptors() 来获取这些描述符对象。

所提供的实现:平台本身没有任何预定义的性质。必要时,特定产品安装可能包含性质。

Copyright (c) 2003 IBM Corporation and others. All rights reserved. 该程序及附带提供的资料是基于“一般公共许可证”(Common Public License) v1.0 的条款提供的,本发行版中提供了该许可证条款,并且也可 在以下位置处找到该条款:http://www.eclipse.org/legal/cpl-v10.html