性质扩展点允许性质编写者使用符号名称注册他们的性质实现,然后,在工作空间中使用此符号名称来查找和配置性质。该符号名称是性质扩展的标识。当定义性质扩展时,鼓励用户在“name”属性中包含人类可读的值,“name”属性标识它们的意义,并且可能显示给用户。
性质可以指定与其它性质的关系约束。“其中一种性质”约束指定在任何给定时间都只能有属于给定性质集的一种性质可以存在于项目中。这将使互相不兼容的性质之间产生互斥。“必需性质”约束指定对于另一种性质的依赖性。当将一种性质添加至项目时,也必须添加所有必需的性质。保证按以下这种方式来配置和取消配置性质:始终在配置性质之前配置它们的必需性质,然后在取消配置性质之后才取消配置必需的性质。因此,不允许性质之间的循环相关性。
如果更改将违反先前满足的任何约束,则不能将性质添加至项目或从项目中除去性质。如果在项目上配置了性质,但是后来发现未满足其约束,则会将该性质以及需要它的所有性质标记为禁用,但是它们会保留在项目中。例如,在必需的性质从安装中丢失时就可能会发生这种情况。还会将安装中丢失的性质以及依赖性循环中涉及的性质标记为禁用。
性质还可以指定哪些增量项目构建器(如果有)是由性质配置的。利用此信息,工作空间将确保构建器将只在它们相应的性质存在并且在正在构建的项目上启用它们时运行。如果从项目中除去了性质,但是性质的取消配置方法未能除去其相应的构建器,则工作空间将自动从规范中除去那些构建器。不允许两个性质在它们的标记中指定同一个增量项目构建器。
性质还具有禁止对它们与之相关联的项目创建链接的资源的能力。通过将 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>
如果在具有标识“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. This program and the accompanying materials are made
available under the terms of the Eclipse Public License v1.0 which
accompanies
this distribution, and is available at
http://www.eclipse.org/legal/epl-v10.html