Le nature di progetto consentono ad un plug-in di contrassegnare un progetto come progetto di tipo specifico. Ad esempio, il JDT (Java Development Tools) utilizza una "natura Java" per aggiungere ai progetti una funzionalità specifica di Java.
Le nature vengono installate in base al progetto; sono configurate automaticamente quando vengono aggiunte ad un progetto e deconfigurate quando vengono rimosse. Un progetto può avere più di una natura.
Per implementare la propria natura personalizzata, è necessario definire un'estensione e fornire una classe che implementa IProjectNature.
Il punto di estensione org.eclipse.core.resources.natures viene utilizzato per aggiungere una definizione di natura di progetto. Il seguente tag aggiunge una natura per un ipotetico plug-in com.example.natures.
<extension
point="org.eclipse.core.resources.natures"
id="mynature"
name="My Nature">
<runtime>
<run class="com.example.natures.MyNature">
</run>
</runtime>
</extension>
La classe identificata nell'estensione deve implementare l'interfaccia di piattaforma IProjectNature. Questa classe implementa la funzionalità specifica del plug-in per associare le informazioni specifiche della natura ad un progetto, quando la natura viene configurata.
public class MyNature implements IProjectNature {
private IProject project;
public void configure() throws CoreException {
// Aggiungere informazioni specifiche sulla natura
// del progetto, ad es. aggiungendo un generatore
// alla specifica di build di un progetto.
}
public void deconfigure() throws CoreException {
// Rimuovere da questo punto le informazioni specifiche sulla natura.
}
public IProject getProject() {
return project;
}
public void setProject(IProject value) {
project = value;
}
}
I metodi configure() e deconfigure() vengono inviati dalla piattaforma quando le nature vengono aggiunte e rimosse da un progetto. L'utente può implementare il metodo configure() per aggiungere un generatore ad un progetto, come descritto nella sezione Generatori.
Una volta definita la natura ed implementata la relativa classe, è necessario assegnare la natura ad un progetto. Il seguente frammento di codice assegna la natura ad un determinato progetto.
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) {
// Qualcosa è andata male
}
L'identificativo utilizzato per la natura è il nome completo (id del plug-in + id dell'estensione) dell'estensione della natura.
Le nature vengono generalmente aggiunte ad un progetto quando questo viene creato. L'utente fornisce una procedura guidata di nuovo progetto personalizzato che cattura le informazioni specifiche relative ad un progetto e assegna a tale progetto la propria natura.