Naturezas do projeto

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.

Definindo uma natureza

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.

Associando a natureza a um projeto

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.