Projectsoorten

org.eclipse.core.resources.natures

Het werkgebied ondersteunt verschillende projectsoorten (ook wel "soorten" genoemd). Een soort koppelt levenscyclusgedrag aan een project. Soorten worden geïnstalleerd per project via de methode setDescription, die in org.eclipse.core.resources.IProject is gedefinieerd. Als u de soorten aan een project toevoegt, worden ze geconfigureerd. Als u ze uit het project verwijdert, worden ze gedeconfigureerd. Bij het soort Java kan bijvoorbeeld een Java-builder worden geïnstalleerd en kunnen andere projectinstellingen worden geconfigureerd bij toevoeging aan een project.

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>


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


<!ELEMENT content-type EMPTY>

<!ATTLIST content-type

id CDATA #REQUIRED>


Hieronder ziet u een voorbeeld met drie soortconfiguraties. waterNature (water) en fireNature (vuur) behoren sluiten elkaar uit, en kunnen dus niet voorkomen in een en hetzelfde project. Voor snowNature (sneeuw) is waterNature (water) vereist, dus snowNature wordt uitgeschakeld voor een project waarin waterNature ontbreekt. Hieruit volgt dat snowNature niet kan worden ingeschakeld voor een project met fireNature. Ten slotte is de aanmaak van gekoppelde resources voor fireNature niet toegestaan.

 
   

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

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.

De waarde van het kenmerk class moet een implementor van org.eclipse.core.resources.IProjectNature zijn. Definities van soorten kunnen worden onderzocht met behulp van de interface org.eclipse.core.resources.IProjectNatureDescriptor. De descriptorobjecten kunnen worden verkregen met behulp van de methoden getNatureDescriptor(String) en getNatureDescriptors() van org.eclipse.core.resources.IWorkspace.

Er zijn geen vooraf gedefinieerde soorten voor het platform. Bij bepaalde producten worden ook de nodige soorten geïnstalleerd.