Projektiluonteiden avulla lisäosa voi merkitä projektin tietynlaiseksi projektiksi. Esimerkiksi JDT (Java development tools) voi lisätä projektiin Java-kohtaisia toimintoja "Java-luonteen" avulla. Projektiluonteet määritetään lisäosien avulla. Ne lisätään tai poistetaan yleensä projektikohtaisesti, kun käyttäjä toteuttaa jonkin toiminnon, jonka lisäosa määrittää.
Projektilla voi olla useampi kuin yksi luonne. Kun määrität projektin, voit määrittää luonteelle erikoisrajoituksia:
Voit toteuttaa oman luonteen määrittämällä laajennuksen ja antamalla luokan, joka toteuttaa kohteen IProjectNature.
Laajennuspisteen org.eclipse.core.resources.natures avulla voit lisätä projektiluonteen määrityksen. Seuraava merkintä lisää luonteen kuvitteelliseen com.example.natures-lisäosaan.
<extension point="org.eclipse.core.resources.natures" id="mynature" name="My Nature"> <runtime> <run class="com.example.natures.MyNature"> </run> </runtime> </extension>
Laajennuksessa yksilöidyn luokan on toteutettava ympäristön rajapinta IProjectNature. Kyseinen luokka toteuttaa lisäosakohtaisen toiminnon, jossa luonnekohtaiset tiedot liitetään projektiin, kun luonne määritetään.
public class MyNature implements IProjectNature { private IProject project; public void configure() throws CoreException { // Lisää projektin luonnekohtaiset tiedot, // esimerkiksi koontitoiminnon lisäys // projektin koontimäärityksiin. } public void deconfigure() throws CoreException { // Poista luonnekohtaiset tiedot tässä. } public IProject getProject() { return project; } public void setProject(IProject value) { project = value; } }
Ympäristö lähettää configure()- ja deconfigure()-metodit, kun luonteet lisätään projektiin tai poistetaan siitä. Voit toteuttaa configure()-metodin, jos haluat lisätä koontitoiminnon projektiin, kuten kohdassa Koontitoiminnot on kuvattu.
Luonteen määritys ei riitä, vaan se on erikseen liitettävä projektiin. Luonne on määritettävä projektiin päivittämällä projektin kuvaus sisältämään luonteen. Tämä tapahtuu yleensä silloin, kun käyttäjä luo uuden projektin erikoistuneella ohjatulla uuden projektin luontitoiminnolla, joka määrittää luonteen. Seuraavassa katkelmassa esitetään, kuinka voit määrittää uuden luonteen projektille.
try { IProjectDescription description = project.getDescription(); String[] natures = description.getNatureIds(); String[] newNatures = new String[natures.length + 1]; System.arraycopy(natures, 0, newNatures, 0, natures.length); newNatures[natures.length] = "com.example.natures.mynature"; description.setNatureIds(newNatures); project.setDescription(description, null); } catch (CoreException e) { // Jokin meni pieleen }
HUOMAUTUS: Luonteen tunnus on luonteen laajennuksen tarkka tunnus. Laajennuksen tarkka tunnus luodaan yhdistämällä lisäosan tunnus yksinkertaiseen laajennustunnukseen plugin.xml-tiedostossa. Esimerkiksi luonne, jolla on yksinkertainen laajennustunnus "mynature" lisäosassa "com.example.natures", saa nimen "com.example.natures.mynature".
Luonteet ei osoitetaan (tai määritetään) projektille vasta, kun määrität projektin kuvauksen projektiin. Huomaa myös, että luonteen tunnus on luonteen laajennuksen tarkka nimi (lisäosan tunnus + laajennustunnus).
Jos luonteeseen on määritetty rajoitteita, työtilan sovellusohjelmaliittymää voi käyttää uuden luonteen kelpoisuuden tarkistukseen. Oletetaan esimerkiksi, että luonne on määritetty edellytyksen kanssa:
<extension point="org.eclipse.core.resources.natures" id="myOtherNature" name="My Other Nature"> <runtime> <run class="com.example.natures.MyOtherNature"> </run> </runtime> <requires-nature id="com.example.natures.mynature"/> </extension>
Uusi luonne ei ole kelvollinen, jos projektissa ei ole ensimmäistä luonnetta. Lisäosan mukaan haluat ehkä tarkistaa, onko edellytetty luonne asennettu, tai haluat ehkä lisätä edellytetyn luonteen itse. Kummin tahansa, voit tarkistaa ehdotettujen projektiluonteiden yhdistelmien kelvollisuuden työtilan sovellusohjelmaliitymän avulla.
try { IProjectDescription description = project.getDescription(); String[] natures = description.getNatureIds(); String[] newNatures = new String[natures.length + 1]; System.arraycopy(natures, 0, newNatures, 0, natures.length); newNatures[natures.length] = "com.example.natures.myOtherNature"; IStatus status = workspace.validateNatureSet(natures); // tarkista tila ja päätä toimista if (status.getCode() == IStatus.OK) { description.setNatureIds(newNatures); project.setDescription(description, null); } else { // käyttäjävirhe ... } } catch (CoreException e) { // Jokin meni pieleen }
Sen lisäksi, että voit käsitellä luonteita niiden tunnusten mukaan, voit noutaa kuvaajan (IProjectNatureDescriptor), joka kuvaa luonnetta, sen rajoitteita ja sen nimiötä. Voit pyytää tietyltä luonteelta sen kuvaajaa tai noutaa kuvaajat työtilasta. Seuraava katkelma noutaa projektin luonteen kuvaajan uutta luonnetta varten:
IProjectNatureDescriptor descriptor = workspace.getNatureDescriptor("com.example.natures.myOtherNature");
Voit noutaa myös joukon kuvaajia kaikille asennetuille luonteille:
IProjectNatureDescriptor[] descriptors = workspace.getNatureDescriptors();