Projektnatur

org.eclipse.core.resources.natures

Arbetsytan stöder projektnaturer (kallas också bara för "natur"). En natur associerar livscykelbeteende med ett projekt. Naturer installerar per projekt med metoden setDescription som definieras på org.eclipse.core.resources.IProject. De konfigureras när de läggs till i ett projekt och avkonfigureras när de tas bort från projektet. Java-naturen kan till exempel installera en Java-byggfunktion och göra annan projektkonfiguration när den läggs till i ett projekt.

Utökningspunkten för naturer gör det möjligt för naturskrivare att registrera sin naturimplementation under ett symboliskt namn som sedan används från arbetsytan för att söka efter och köra naturer. Det symboliska namnet är id:et på utökningspunkten för naturen. När en utökningspunkt för en natur ska definieras, bör användarna inkludera ett värde som kan läsas av människor för "name"-attributet som identifierar innebörden och som potentiellt kan presenteras för användare.

Naturer kan ange relationsbegränsningar med andra naturer. Begränsningen "one-of-nature" anger att högst en natur som tillhör en viss uppsättning kan finnas i ett projekt samtidigt. Detta tvingar fram en ömsesidig exkludering mellan naturer som inte är kompatibla med varandra. Begränsningen "requires-nature" anger ett beroende av en annan natur. När en natur läggs till i ett projekt måste även alla obligatoriska naturer läggas till. Naturerna konfigureras och avkonfigureras på ett sådant sätt att deras obligatoriska naturer alltid konfigureras före dem och avkonfigureras efter dem. Av den anledningen tillåts inte cykliska beroenden mellan naturer.

Naturer kan inte läggas till eller tas bort från ett projekt om den ändringen bryter eventuella begränsningar som redan har uppfyllts. Om en natur konfigureras i ett projekt men du senare upptäcker att dess begränsningar inte har uppfyllts, markeras den naturen och alla naturer som naturen kräver som disabled, men förblir kvar i projektet. Detta kan till exempel inträffa när en obligatorisk natur saknas från installationen. Naturer som saknas från installationen och naturer som ingår i beroendecykler markeras också som "disabled".

Naturer kan även ange vilka eventuella inkrementella projektbyggfunktioner som har konfigureras av naturerna. Med den informationen kommer byggfunktioner endast att köras på arbetsytan när motsvarande natur existerar och är aktiverad i det projekt som byggs. Om en natur tas bort från ett projekt men naturens avkonfigureringsmetod misslyckas med att ta bort motsvarande byggfunktioner, kommer dessa byggfunktioner att tas bort från spec-filen automatiskt. Två naturer kan inte ange samma inkrementella projektbyggfunktion i sin märkordsuppsättning.

Naturer har också möjlighet att förbjuda att länkade resurser skapas i projekt som de är associerade till. Om allowLinking-attributet sätts till "false" kan en natur deklarera att länkade resurser inte får skapas. Den här funktionen var ny i version 2.1.

Från och med version 3.1 kan naturer deklarera tillhörighet med godtyckliga innehållstyper, vilket påverkar hur innehållstyper anges för filer på arbetsytan. Om det uppstår konflikter (två eller fler innehållstyper anses vara lika lämpliga för en viss fil), kommer den innehållstyp som har tillhörighet med någon av naturerna som har konfigurerats för motsvarande projekt att väljas.

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


Följande är ett exempel på tre naturkonfigurationer. waterNature och fireNature tillhör samma exklusiva uppsättning, så de kan inte finnas i samma projekt. snowNature kräver waterNature, så snowNature avaktiveras i ett projekt där waterNature saknas. Det innebär att snowNature inte kan aktiveras i ett projekt med fireNature. fireNature tillåter heller inte att länkade resurser skapas.

 
   

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

Om dessa utökningar definierades i ett insticksprogram med id "com.xyz.coolplugin", skulle det fullständiga namnet på dessa naturer vara "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" och "com.xyz.coolplugin.snowNature".

Värdet på klassattributet måste motsvara en implementeringsfunktion för org.eclipse.core.resources.IProjectNature. Naturdefinitioner kan granskas med gränssnittet org.eclipse.core.resources.IProjectNatureDescriptor. Descriptor-objekten kan anges med metoderna getNatureDescriptor(sträng) och getNatureDescriptors() i org.eclipse.core.resources.IWorkspace.

Plattformen har inga fördefinierade naturer. Specifika produktinstallationer kan inkludera de naturer som behövs.