Projektjellegek

org.eclipse.core.resources.natures

A munkaterület támogatja a projektjellegek (vagy röviden "jellegek") fogalmát. A jelleg életciklus-viselkedést társít egy projekthez. A jellegek az org.eclipes.core.resources.IProject osztály setDescription metódusa segítségével projektenként vannak telepítve. A projekt megnyitásakor automatikusan beállításra kerülnek, a projekt lezárásakor pedig megtörténik a kiiktatásuk. Például a Java jelleg telepíthet Java összeépítőt, és egyéb projektbeállítást végezhet egy projekthez hozzáadáskor.

A jelleg kiterjesztési pont segítségével a jellegek írói egy szimbolikus név alatt regisztrálhatják saját jellegtípusaikat, amely azután a munkaterületen belül jellegek létrehozására és lekérdezésére használható. A szimbolikus név a jellegkiterjesztés azonosítója. Jelleg kiterjesztés meghatározásakor a "name" attribútumnak ajánlatos értelemmel bíró értéket adni, amely azonosítja az adott jelleget, és esetleg megjeleníthető a felhasználók számára.

A jellegek viszonymegszorításokat határozhatnak meg más jellegekkel. Az "one-of-nature" ("egyfajta-jelleg") megszorítás azt határozza meg, egy adott halmazba tartozó jellegek közül egy projektben egyszerre legfeljebb egy szerepelhet. Ennek szükségszerű következménye az egymással nem kompatibilis jellegek közti kölcsönösen kizárás. A "requires-nature" ("szükséges-jelleg") megszorítás függőséget határoz meg egy másik jelleg irányába. Amikor egy jelleg bekerül egy projektbe, akkor valamennyi szükséges jelleget is fel kell venni. A jellegek beállítása és kiiktatása során garantált, hogy a szükséges jellegek a még beállításukat megelőzően beállításra kerülnek, és csak saját kiiktatásuk után kerülnek kiiktatásra. Emiatt a jellegek közti körkörös függőség nem megengedett.

A jellegek nem vehetők fel vagy távolíthatók el egy projektből, ha ez a módosítás korábban már kielégített megszorításokat sértene. Ha egy jelleg be van állítva egy projekthez, de később kiderül, hogy a megszorításai nincsenek kielégítve, akkor ez a jelleg, és valamennyi jelleg, amely ezt igényli tiltott jelzést kap, de megmarad a projektben. Ez például akkor történhet meg, ha egy szükséges jelleg kimarad a telepítésből. A telepítésből kimaradt, valamint a függőségi körökben szereplő jellegek szintén tiltottként vannak megjelölve.

A jellegek azt is meghatározhatják, hogy konfigurálnak-e növekményes projekt-összeépítőt, és ha igen, akkor melyiket. Ezen információk segítségével a munkaterület biztosítja, hogy az egyes összeépítők csak akkor kerülnek futtatásra, ha a nekik megfelelő jelleg jelen van és az összeépítés alatt álló projekten belül engedélyezett. Ha egy jelleg eltávolításra kerül egy projektből, de a kiiktatási metódusának nem sikerül eltávolítania a hozzá tartozó összeépítőket, akkor ezeket a munkaterület automatikusan eltávolítja a specifikációból. Nem megengedett, hogy két jelleg ugyanazt a növekményes projekt-összeépítőt határozza meg a kódjában.

A jellegek a hozzájuk társított projektekben megtagadhatják csatolt erőforrások létrehozását. Az allowLinking attribútum "false" értékre állításával a jelleg meghatározhatja, hogy csatolt erőforrásokat ne lehessen létrehozni. Ez a 2.1 kiadás egy új szolgáltatása.

A 3.1-es kiadással kezdve a jellegek meghatározhatnak rokonságot tetszőleges tartalomtípusokkal, amellyel befolyásolhatják a munkaterületen lévő fájlok tartalomtípusának meghatározásának módját. Ütközések esetén (ha több tartalomtípus azonosan megfelelőnek tekinthető egy adott fájlhoz) a megfelelő projekthez beállított bármely jelleggel rokonságot mutató tartalomtípus kerül kiválasztásra.

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


Az alábbiakban három jellegkonfigurációra látható példa. A waterNature és fireNature ugyanabba a kizárólagos halmazba tartoznak, így nem szerepelhetnek ugyanabban a projektben. A snowNature megköveteli a waterNature jelenlétét, így azokban a projektekben, amelyekből a waterNature hiányzik, a snowNature tiltott lesz. Ebből következik, hogy a snowNature és a fireNature nem lehet engedélyezett ugyanabban a projektben. A fireNature sem engedélyezi csatolt erőforrások létrehozását.

 
   

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

Ha ezek a jellegek a "com.xyz.coolplugin" azonosítóval rendelkező bedolgozóban lennének meghatározva, akkor a teljes képzésű nevük "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" valamint "com.xyz.coolplugin.snowNature" lenne.

A class attribútum értéke az org.eclipse.core.resources.IProjectNature megvalósítója kell, hogy legyen. A jellegmeghatározások az org.eclipse.core.resources.IProjectNatureDescriptor felület segítségével vizsgálhatók. A leíró objektumok az org.eclipse.core.resources.IWorkspace osztály getNatureDescriptor(String) és getNatureDescriptors() metódusai segítségével kérhetők le.

A környezet nem rendelkezik előre meghatározott jellegekkel. Bizonyos terméktelepítők szükség szerint tartalmazhatnak jellegeket.