Punkt rozszerzenia natur pozwala ich twórcom na rejestrowanie implementacji natur pod symboliczną nazwą, która jest następnie używana w obszarze roboczym do znajdowania i konfigurowania natur. Nazwa symboliczna to identyfikator rozszerzenia natury. Podczas definiowania rozszerzenia natur zalecane jest podawanie czytelnej dla człowieka wartości atrybutu name, która będzie identyfikowała jego znaczenie i będzie mogła być prezentowana użytkownikowi.
Natury mogą określać ograniczenia związków z innymi naturami. Ograniczenie one-of-nature określa, że w dowolnym momencie w projekcie może istnieć najwyżej jedna natura należąca do danego zestawu. Wymusza to wzajemne wykluczanie się natur, które są niezgodne z innymi naturami. Ograniczenie requires-nature określa zależność od innej natury. Podczas dodawania natury do projektu muszą także zostać dodane wszystkie wymagane przez nią natury. Natury są konfigurowane w taki sposób, że wymagane przez nie natury są zawsze konfigurowane przed nimi i dekonfigurowane po nich. Z tego powodu cykliczne zależności między naturami są niedozwolone.
Nie można dodawać natur do projektu ani usuwać ich z projektu, jeśli taka zmiana spowodowałaby naruszenie jakichkolwiek obowiązujących wcześniej ograniczeń. Jeśli natura zostanie skonfigurowana w projekcie, ale później okaże się, że jej ograniczenia nie zostały spełnione, natura ta oraz wszystkie wymagane przez nią natury zostaną oznaczone jako wyłączone, chociaż pozostaną w projekcie. Może się tak zdarzyć na przykład w przypadku niezainstalowania wymaganej natury. Natury niezainstalowane oraz natury uczestniczące w cyklach zależności również są oznaczane jako wyłączone.
Natury mogą również określać, które programy przyrostowo budujące projekty (o ile istnieją) są przez nie konfigurowane. Dzięki tym informacjom programy budujące są uruchamiane w obszarze roboczym tylko w przypadku, gdy w budowanym projekcie istnieje i jest włączona odpowiednia natura. Jeśli natura zostanie usunięta z projektu, ale metoda dekonfiguracji natury nie usunie odpowiednich programów budujących, programy te zostaną usunięte automatycznie przez obszar roboczy. Określenie przez dwie natury w ich języku znaczników tego samego programu przyrostowo budującego projekty jest niedozwolone.
Natury mogą także uniemożliwiać tworzenie dowiązanych zasobów w projektach, z którymi są powiązane. Przez ustawienie dla atrybutu allowLinking
wartości "false" natura może zadeklarować, że dowiązane zasoby nie powinny być tworzone. Funkcja ta stanowi nowość w wersji 2.1.
Od wersji 3.1 natury mogą zadeklarować powinowactwo z wybranymi typami treści, co ma wpływ na sposób określania typu treści dla plików w obszarze roboczym. W przypadku konfliktów (dwa lub więcej typy treści uznane jako odpowiednie dla danego pliku) zostanie wybrany typ treści, który ma powinowactwo do dowolnej natury skonfigurowanej w odpowiednim projekcie.
<!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>
Jeśli rozszerzenia te zostały zdefiniowane w module dodatkowym o identyfikatorze com.xyz.coolplugin, pełnymi nazwami tych natur będą: com.xyz.coolplugin.fireNature, com.xyz.coolplugin.waterNature i 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 i inne podmioty.
Wszelkie prawa zastrzeżone. Program ten oraz towarzyszące mu materiały są udostępniane na warunkach licencji EPL (Eclipse Public License), wersja 1.0, dołączonej do nich i dostępnej pod adresem http://www.eclipse.org/legal/epl-v10.html.