As naturezas do projeto permitem que um plug-in marque um projeto como um tipo específico de projeto. Por exemplo, o Java Development Tools (JDT) utiliza uma "Natureza Java" para incluir comportamento Java específico nos projetos.
As naturezas são instaladas por projeto e são configuradas automaticamente quando incluídas em um projeto e perdem a configuração quando removidas. Um projeto pode ter mais de uma natureza.
Para implementar uma natureza própria, você precisa definir uma extensão e fornecer uma classe que implemente IProjectNature.
O ponto de extensão org.eclipse.core.resources.natures é utilizado para incluir uma definição de natureza do projeto. A marcação a seguir inclui uma natureza para o plug-in hipotético 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>
A classe identificada na extensão deve implementar IProjectNature da interface da plataforma. Essa classe implementa o comportamento específico do plug-in para associação de informações específicas da natureza com um projeto, quando a natureza está configurada.
public class MyNature implements IProjectNature {
private IProject project;
public void configure() throws CoreException {
// Inclua informações específicas da natureza
// do projeto, como a inclusão de um construtor
// à especificação de construção de um projeto.
}
public void deconfigure() throws CoreException {
// Remova as informações específicas da natureza aqui.
}
public IProject getProject() {
return project;
}
public void setProject(IProject value) {
project = value;
}
}
Os métodos configure() e deconfigure() são enviados pela plataforma quando são incluídas e removidas naturezas de um projeto. Você pode implementar o método configure() para incluir um construtor a um projeto, conforme discutido em Construtores.
Depois de definir a natureza e implementar sua classe, você deve atribuí-la a um projeto. O snippet a seguir atribui a nosa nova natureza a um determinado projeto.
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) {
// Algo deu errado
}
O identificador utilizado para a natureza é o nome completo (ID do plug-in + ID da extensão) da extensão da natureza.
Geralmente, as naturezas são incluídas em um projeto quando ele é criado. Normalmente, você fornece um novo ssistente de projeto personalizado, o qual captura as informações especializadas sobre um projeto e atribui sua natureza a ele.