Naturens udvidelsespunkt gør det muligt for naturers skrivefunktioner at registrere deres naturimplementering under et symbolsk navn, som så bruges inde fra arbejdsområdet til at finde og konfigurere naturer. Det symbolske navn er id'en for naturudvidelsen. Når brugerne definerer en naturudvidelse, opfordres brugerne til at inkludere en værdi, der kan læses af mennesker, for den "name"-attribut, der identificerer meningen, og som brugerne eventuelt får vist.
Naturer kan angive relationsbetingelser i forhold til andre naturer. Betingelsen "one-of-nature" angiver, at højst én natur, der tilhører et bestemt sæt, kan eksistere på et projekt på et givent tidspunkt. Det gennemtvinger en gensidig udelukkelse af naturer, som ikke er kompatible med hinanden. Betingelsen "requires-nature" angiver en afhængighed af en anden natur. Når en natur tilføjes til et projekt, skal alle påkrævede naturer også tilføjes. Det garanteres, at naturerne bliver konfigureret og afkonfigureret på en sådan måde, at de påkrævede naturer altid konfigureres før dem og afkonfigureres efter dem. Det er grunden til, at cykliske afhængigheder mellem naturer ikke er tilladt.
Naturer kan ikke tilføjes til eller fjernes fra et projekt, hvis ændringen ville medføre overtrædelse af betingelser, som tidligere er blevet overholdt. Hvis en natur konfigureres på et projekt, men senere opdager, at dens betingelser ikke overholdes, markeres den natur og alle naturer, som kræver den, som deaktiveret, men de forbliver på projektet. Det kan f.eks. være tilfældet, hvis en påkrævet natur pludselig mangler i installationen. Naturer, der mangler i installationen, og naturer, som er involveret i afhængighedscykler, markeres også som deaktiveret.
Naturer kan også angive, hvilke eventuelle trinvise projektbyggeprogrammer de har konfigureret. Med disse oplysninger sikrer arbejdsområdet, at byggeprogrammer kun udføres, når den tilsvarende natur er til stede og aktiveret på det projekt, der bliver bygget. Hvis en natur fjernes fra et projekt, men det ikke lykkes for naturens afkonfigurationsmetode at fjerne de tilhørende byggeprogrammer, fjerner arbejdsområdet automatisk disse byggeprogrammer fra specifikationen. To naturer må ikke angive det samme trinvise projektbyggeprogram i koden.
Naturer har også mulighed for ikke at tillade oprettelse af sammenkædede ressourcer på projekter, de er tilknyttet. Ved at angive allowLinking
-attributten til "false" kan en natur erklære, at sammenkædede ressourcer aldrig skal oprettes. Denne funktion er ny i version 2.1.
Fra version 3.1 kan naturer erklære et tilhørsforhold til vilkårlige indholdstyper, hvilket påvirker den måde, indholdstyper fastlægges på i forbindelse med filer i arbejdsområdet. I tilfælde af konflikt (to eller flere indholdstyper er lige velegnede for en given fil), vælges den indholdstype, der har et tilhørsforhold til en af de naturer, der er konfigureret for det tilsvarende projekt.
<!ELEMENT extension (runtime , (one-of-nature | requires-nature | builder | content-type)* , options?)>
<!ATTLIST-udvidelse
point CDATA #REQUIRED
id CDATA #REQUIRED
navn 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>
Hvis disse udvidelser blev defineret i en plugin med id'en "com.xyz.coolplugin", ville disse naturers fuldstændige navn være "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" og "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