Met behulp van het extensiepunt voor soorten kunnen schrijvers van soorten hun soortenimplementatie vastleggen onder een symbolische naam. Deze naam kan vervolgens vanuit het werkgebied worden gebruikt om soorten op te zoeken en te configureren. De symbolische naam is het ID van de soortenextensie. Bij het definiëren van een soortenextensie is het raadzaam een beschrijvende en gemakkelijk leesbare weergavenaam in te voeren voor het kenmerk "name".
U kunt beperkingen opgeven voor relaties tussen verschillende soorten. Met de beperking "one-of-nature" (een-van-soort) wordt opgegeven dat er per project slechts één soort van een gegeven set kan bestaan. Zo kunt u geforceerd soorten uitsluiten die niet compatibel zijn met elkaar. Met de beperkende voorwaarde "requires-nature" (vereist-soort) wordt een dependency (afhankelijkheid) van een ander soort opgegeven. Wanneer een soort aan een project wordt toegevoegd, moeten ook alle verplichte soorten worden toegevoegd. Dit garandeert dat de soorten dusdanig worden geconfigureerd en gedeconfigureerd dat alle daarvoor vereiste soorten altijd als eerste worden geconfigureerd en als laatste weer worden gedeconfigureerd. Om die reden zijn cyclische dependency's tussen soorten niet toegestaan.
Soorten kunnen niet worden toegevoegd aan of verwijderd uit een project als door die wijziging niet meer aan alle beperkende voorwaarden wordt voldaan terwijl dit eerst wel het geval was. Als voor een project een soort is geconfigureerd, maar later blijkt dat niet aan de beperkende voorwaarden wordt voldaan, worden dat soort en alle daarvan afhankelijke soorten gemarkeerd als uitgeschakeld. De soorten blijven wel aanwezig in het project. Deze situatie kan zich voordoen wanneer een vereiste soort tijdens de installatie verloren gaat. Soorten die tijdens de installatie verloren zijn gegaan en soorten die deel uitmaken van dependency-cyclussen worden ook gemarkeerd als uitgeschakeld.
In soorten kan ook worden opgegeven welke incrementele projectbuilders, indien van toepassing, erdoor worden geconfigureerd. Deze informatie wordt in het werkgebied gebruikt om ervoor te zorgen dat builders alleen worden uitgevoerd wanneer het bijbehorende soort aanwezig en ingeschakeld is voor het project dat wordt gebouwd. Als een soort uit een project wordt verwijderd, maar de bijbehorende builders niet kunnen worden verwijderd door de deconfiguratiemethode, worden die builders automatisch uit de specificatie verwijderd door het werkgebied. Het is niet toegestaan dezelfde incrementele projectbuilder op te geven in de markup van twee verschillende soorten.
Voor soorten bestaat ook de mogelijkheid om de aanmaak van gekoppelde resources voor bijbehorende projecten te verhinderen. Door het kenmerk allowLinking
in te stellen op "false" kan een soort declareren dat er nooit gekoppelde resources mogen worden gemaakt. Deze feature is nieuw in release 2.1.
Vanaf release 3.1 kunnen soorten met een affiniteit met willekeurige inhoudtypen worden gedeclareerd. Dit beïnvloedt de manier waarop het bestandstype wordt bepaald voor bestanden in het werkgebied. Als er conflicten optreden (bijvoorbeeld omdat twee of meer inhoudtypen even geschikt geacht worden voor een gegeven bestand), wordt het inhoudtype gekozen dat affiniteit heeft met een van de soorten die zijn geconfigureerd voor het bijbehorende project.
<!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>
Als deze extensies waren gedefinieerd in een plugin met het ID "com.xyz.coolplugin", zou de volledig gekwalificeerde naam van deze soorten "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" en "com.xyz.coolplugin.snowNature" zijn.<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 en anderen.
Alle rechten voorbehouden. Dit programma en het begeleidende materiaal zijn beschikbaar gesteld onder de voorwaarden van de Eclipse Public License v1.0 die bij deze distributie is geleverd en beschikbaar is op http://www.eclipse.org/legal/epl-v10.html.