描述:工作区支持项目性质(或简称为“性质”)的概念。 性质使有效期行为与项目相关联。性质是使用在 org.eclipse.core.resources.IProject 上定义的 setDescription 方法安装在每个项目基础上的。当将它们添加至项目会自动配置它们,当从项目中除去它们时,就会取消对它们的配置。例如,在将 Java 性质添加至项目时它们可能会安装一个 Java 构建器并执行其它项目配置。
性质扩展点允许性质编写者使用符号名注册他们的性质实现,然后,在工作区中使用此符号名来查找和配置性质。符号名称是性质扩展的标识。当定义性质扩展时,鼓励用户包括“name”属性的人们可阅读的值,该值标识它们的含义并且可能显示给用户。
性质可以指定与其它性质的关系约束。“其中一个性质”约束指定在给定的任何时间,一个项目上最多可以存在属于给定性质集的一个性质。这在互相不兼容的性质之间强制使用互斥。“需要性质”约束指定另一性质的相关性。当将性质添加至项目时,还必须添加所有必需的性质。将以这样的方法保证配置和取消配置性质:在它们之前,总是配置它们的必需性质并在它们之后取消配置它们。因此,不允许性质之间存在循环相关性。
如果更改将违反先前满足的任何约束,则不能将性质添加至项目或从项目中除去性质。 如果在项目上配置了性质,但是后来发现不能满足其约束,则会将该性质以及需要它的所有性质标记为禁用, 但是会保留在项目中。例如,在必需的性质从安装中丢失时就可能会发生这种情况。还会将安装中丢失的性质以及从属周期中涉及的性质标记为禁用。
性质还可以指定哪些增量项目构建器(如果有的话)是由它们配置的。利用此信息,工作区将确保构建器将只在它们相应的性质存在并且在正在构建的项目上启用它们时运行。如果从项目中除去了性质,但是性质的取消配置方法未能除去其相应的构建器,则工作区将自动从构建规范中除去那些构建器。不允许两个性质在它们的标记中指定同一个增量项目构建器。
配置标记:
<!ELEMENT runtime run?>
<!ELEMENT run parameter*>
<!ATTLIST run
class
CDATA #REQUIRED
>
示例:
以下是三个性质配置示例。waterNature 和 fireNature 属于同一个互斥集,因此它们不能共存于同一项目中。snowNature 需要 waterNature,因此在缺少了 waterNature 的项目上将禁用 snowNature。它自然遵循不能在具有 fireNature 的项目上启用 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"/>
</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.IWorkspace 上的方法 getNatureDescriptor(String) 和 getNatureDescriptors() 来获取这些描述符对象。
所提供的实现:平台本身没有任何预定义的性质。必要时,特定产品安装可能包含性质。