Criando um módulo NetBeans utilizando o Maven

Este documento demonstra como criar um projeto no módulo NetBeans a partir de um arquetipo Maven e como desenvolver e instalar o módulo em sua instalação do IDE. Neste tutorial, você criará um projeto de módulo simples que após ser instalado permite criar um novo tipo de arquivo em seus projetos. Este módulo também cria uma ação de menu que fica disponível quando o novo tipo de arquivo é selecionado.

Este documento tem base no Tutorial de tipo de arquivo do NetBeans com base no Ant e ilustra algumas das diferenças entre o uso do Ant e do Maven para desenvolver módulos NetBeans. Após compreender algumas das diferenças, é possível prosseguir com facilidade através dos outros tutoriais na Trilha de aprendizado da plataforma NetBeans.

Caso seja novo na plataforma NetBeans, recomenda-se com ênfase que você assista à série de screencasts As 10 principais APIs do NetBeans.

Conteúdo

O conteúdo desta página se aplica ao NetBeans IDE 6.5, 6.7, 6.8

Para seguir este tutorial, os softwares e recursos listados na tabela seguinte são necessários.

Software ou recurso Versão necessária
NetBeans IDE versão 6.9
Java Developer Kit (JDK) Versão 6
Maven Versão 2.0.9 ou superior

Nota: não é preciso efetuar o download de uma versão separada da plataforma NetBeans para desenvolver aplicativos para a plataforma NetBeans. Normalmente, você desenvolverá os aplicativos e os módulos no NetBeans IDE e, em seguida, somente incluirá os módulos necessários para executar a plataforma NetBeans e seu aplicativo.

Antes de começar este tutorial, talvez você queira se familiarizar com a documentação a seguir.

Usando Maven com o IDE

Se este for seu primeiro projeto Maven, talvez queira se familiarizar com as definições de configurações e com o navegador do repositório Maven.

Configurando as opções do Maven

É possível usar a aba Maven na janela Opções para configurar o comportamento do Maven no IDE e verificar se sua configuração está correta.

  1. Selecione a categoria Diversos na janela Opções e clique na aba Maven.
  2. Especifique a localização da instalação local do Maven (requer 2.0.9 ou mais recente).
  3. Verifique se a localização do repositório local do Maven está correta.
  4. Clique em OK.

Na maioria dos casos, se sua configuração do Maven é a típica, as informações na janela Opções já devem estar corretas.

Nota. O suporte ao Maven é ativado como parte do conjunto de recursos do Java SE. Se a aba Maven não estiver disponível na janela Opções, confirme se o Java SE está ativado ao criar um aplicativo Java.

Visualizando os repositórios Maven

Os artefatos que são usados pelo Maven para construir todos os seus projetos são armazenados em seu repositório local Maven. Quando um artefato é declarado como uma dependência do projeto, o artefato é baixado para seu repositório local a partir de um dos repositórios remotos registrados.

Como padrão, o repositório NetBeans e os diversos repositórios Maven indexados conhecidos são registrados e identificados na janela do navegador do repositório. O repositório NetBeans contém a maioria dos artefatos públicos necessários para que você desenvolva seu projeto. Você pode usar o navegador do repositório Maven para visualizar o conteúdo dos repositórios locais e remotos. Você expande o nó Repositório local para ver os artefatos que estão presentes localmente. Os artefatos listados abaixo dos nós do repositório NetBeans podem ser adicionados como dependências do projeto, mas nem todos eles estão localmente presentes. Eles são adicionados ao repositório local somente quando são declarados como dependências do projeto.

Para abrir o navegador do repositório Maven:

Criando o projeto do módulo da plataforma NetBeans

Nesta seção você criará um projeto do módulo NetBeans e a seguir criará um DataObject para o novo tipo de arquivo.

Criando o módulo

Neste exercício, você usa o assistente Novo projeto para criar um projeto do módulo NetBeans a partir de um arquetipo Maven.

  1. Abra o assistente Novo projeto e escolha Módulo NetBeans Maven na categoria Maven. Clique em Próximo.
  2. Digite AbcFileType em Nome do projeto. Clique em Terminar.

Quando você clicar em Terminar, o IDE criará o projeto AbcFileType. Se você examinar o POM poderá ver que o Maven utilizará o plug-in maven-jar para desenvolver o JAR e o plug-in nbm-maven empacotará o JAR como um módulo NetBeans (nbm).

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>AbcFileType</artifactId>
    <packaging>nbm</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>AbcFileType NetBeans Module</name>
    ...
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>nbm-maven-plugin</artifactId>
                <extensions>true</extensions>
            </plugin>
            ...
            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <!-- to have the jar plugin pickup the nbm generated manifest -->
                    <useDefaultManifestFile>true</useDefaultManifestFile>
                </configuration>
            </plugin>
        </plugins>
    </build>

Criando a classe DataObject

Nesta seção você utilizará o assistente Novo tipo de arquivo para criar os arquivos para a criação e reconhecimento de um novo tipo de arquivo denominado .abc. O assistente criará um DataObject, um solucionador de tipo MIME e um modelo de arquivo para os arquivos abc e modificará o layer.xml para adicionar entradas do registro para o novo tipo de arquivo.

  1. Clique com o botão direito do mouse no nó da janela Projeto e escolha Novo > Tipo de arquivo.
  2. No painel Reconhecimento de arquivo, digite text/x-abc para o Tipo the MIME e .abc .ABC como a extensão do nome do arquivo. Clique em Próximo.
    Captura de tela para o assistente Novo tipo de arquivo
  3. Digite Abc como o prefixo do nome da classe.
  4. Clique em Procurar e selecione um arquivo de imagem de 16x16 pixels como o ícone do novo tipo de arquivo. Clique em Terminar.

    Você pode salvar esta imagem como abc16.pngimagem do ícone 16x16 ) em seu sistema e especificar a imagem no assistente.

Quando você clica em Terminar, o IDE cria a classe AbcDataObject e copia o ícone do tipo de arquivo no pacote em src/main/resources sob Outras origens.
Captura de tela da janela Projetos

Na janela Projetos é possível visualizar que o assistente criou o solucionador de tipo MIME (AbcResolver.xml) e os arquivos de modelo (AbcTemplate.abc) no diretório src/main/resources.

Para obter mais detalhes sobre os arquivos criados pelo IDE, consulte O que é um DataObject e a seção em Reconhecendo arquivos Abc no tutorial de tipo de arquivo NBM.

Desenvolvendo e executando o projeto

Nesta seção você configurará o módulo para que seja instalado na versão atual do IDE. Uma nova instância do IDE se inicia quando você executa o módulo.

Especificando a localização da instalação do NetBeans

Como padrão, nenhuma instalação NetBeans alvo é especificada quando você usa o arquetipo Maven para criar um módulo da plataforma NetBeans. Você pode desenvolver o projeto, mas quando tenta executá-lo antes de definir o diretório de instalação, verá um erro de versão similar ao seguinte na janela Saída.
Captura de tela da janela Saída mostrando o erro de versão

Para instalar e executar o módulo em uma instalação do IDE, é necessário editar o elemento nbm-maven-plugin no POM para especificar o caminho para o diretório de instalação.

  1. Expanda o nó Arquivos do projeto e abra o pom.xml no editor.
  2. Especifique o caminho para a instalação do NetBeans ao modificar o elemento nbm-maven-plugin para adicionar o elemento <netbeansInstallation>.
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>nbm-maven-plugin</artifactId>
        <version>3.2</version>
        <extensions>true</extensions>
        <configuration>
           <netbeansInstallation>/home/me/netbeans-6.9</netbeansInstallation>
        </configuration>
    </plugin>

    Nota. O caminho precisa especificar o diretório que contenha o diretório bin contendo o arquivo executável.

    Por exemplo, no SO X o caminho pode se parecer com o seguinte.

    <netbeansInstallation>/Applications/NetBeans/NetBeans 6.9.app/Contents/Resources/NetBeans</netbeansInstallation>

Executando o módulo

Após especificar o diretório de instalação do NetBeans IDE, é possível desenvolver e executar o módulo.

  1. Clique com o botão direito do mouse no nó do projeto e escolha Construir.
  2. Clique com o botão direito do mouse no nó do projeto e escolha Executar.

Quando você escolhe Executar, o IDE é iniciado com o novo módulo instalado. Para confirmar que o novo módulo esteja funcionando corretamente, crie um novo projeto e a seguir use o assistente Novo arquivo para criar um arquivo abc. Por exemplo, você pode criar um aplicativo Java simples e a seguir abrir o assistente Novo arquivo e escolher o tipo de arquivo Empty Abc na categoria Outro.

Quando você cria o novo arquivo, especifique uma pacote de origem se desejar visualizar o arquivo na janela Projetos. Como padrão, o assistente para o novo tipo de arquivo criará o arquivo no nível raiz do projeto.

Captura de tela do assistente Novo arquivo com o tipo de arquivo Abc
Após você criar o novo arquivo abc, poderá visualizar que o arquivo é exibido na janela Projetos com o ícone para o tipo de arquivo. Se você abrir o arquivo no editor, poderá visualizar o conteúdo do novo arquivo que foi gerado a partir do modelo de arquivo.
Captura de tela do arquivo Abc na janela Projetos e aberto no editor

Adicionando uma ação para o tipo de arquivo

Nesta seção você adicionará uma ação que pode ser chamada a partir do menu suspenso quando o usuário clica com o botão direito do mouse no nó do novo tipo de arquivo.

Criando a classe Action

Neste exercício, usaremos o assistente Nova ação para criar uma classe Java que executará uma ação para o novo tipo de arquivo. O assistente também registrará a classe no layer.xml.

  1. Clique com o botão direito do mouse no nó do projeto e escolha Nova > Ação.
  2. No painel Tipo de ação, selecione Condicionalmente habilitado e digite com.mycompany.abcfiletype.AbcDataObject para a classe Cookie. Clique em Próximo.
    Captura de tela do assistente Nova ação
  3. Selecione Editar na lista suspensa Categoria e cancele a seleção de Item de menu global.
  4. Selecione Item de menu de contexto de tipo de arquivo e selecione text/x-abc na lista suspensa Tipo de conteúdo. Clique em Próximo.
  5. Digite MyAction como o Nome da classe e My Action como o Nome de exibição. Clique em Terminar.

Quando você clica em Terminar, MyAction.java é criado no pacote fonte com.mycompany.abcfiletype. Se você abre o layer.xml no editor, poderá visualizar que o assistente adicionou detalhes sobre a nova ação para o tipo de arquivo dentro da pasta Edit e o elemento dentro da pasta Actions.

<folder name="Actions">
    <folder name="Edit">
        <file name="com-mycompany-abcfiletype-MyAction.instance">
            <attr name="delegate" methodvalue="org.openide.awt.Actions.inject"/>
            <attr name="displayName" bundlevalue="com.mycompany.abcfiletype.Bundle#CTL_MyAction"/>
            <attr name="injectable" stringvalue="com.mycompany.abcfiletype.MyAction"/>
            <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.context"/>
            <attr name="noIconInMenu" boolvalue="false"/>
            <attr name="selectionType" stringvalue="EXACTLY_ONE"/>
            <attr name="type" stringvalue="com.mycompany.abcfiletype.AbcDataObject"/>
        </file>
    </folder>
</folder>

O assistente também gerou elementos dentro das pastas Loaders e Factories e elementos que se aplicam ao novo tipo de arquivo. As ações de menu para o tipo de arquivo abc são especificadas sob Actions e o DataLoader é especificado sob Factories.

<folder name="Loaders">
    <folder name="text">
        <folder name="x-abc">
            <folder name="Actions">
                <file name="com-mycompany-abcfiletype-MyAction.shadow">
                    <attr name="originalFile" stringvalue="Actions/Edit/com-mycompany-abcfiletype-MyAction.instance"/>
                    <attr name="position" intvalue="0"/>
                </file>
                <file name="org-openide-actions-CopyAction.shadow">
                    <attr name="originalFile" stringvalue="Actions/Edit/org-openide-actions-CopyAction.instance"/>
                    <attr name="position" intvalue="400"/>
                </file>
                ...
            </folder>
            <folder name="Factories">
                <file name="AbcDataLoader.instance">
                    <attr name="SystemFileSystem.icon" urlvalue="nbresloc:/com/mycompany/abcfiletype/abc16.png"/>
                    <attr name="dataObjectClass" stringvalue="com.mycompany.abcfiletype.AbcDataObject"/>
                    <attr name="instanceCreate" methodvalue="org.openide.loaders.DataLoaderPool.factory"/>
                    <attr name="mimeType" stringvalue="text/x-abc"/>
                </file>
            </folder>
        </folder>
    </folder>
</folder>

A posição de My Action no menu suspenso é especificada pelo atributo posição (<attr name="position" intvalue="0"/>). O padrão é o de atribuir o atributo intvalue de uma nova ação como 0 que fará com que a ação esteja no topo da lista. Você pode alterar a ordem ao alterar o intvalue. Por exemplo, se você altera o intvalue para 200, o item de menu My Action aprecerá abaixo do item de menu Abrir (a ação Abrir tem um intvalue de 100).

Atribuindo um comportamento à ação

Agora é necessário adicionar o código para a ação. Neste exemplo, você adicionará algum código que usa DialogDisplayer para abrir uma caixa de diálogo quando a ação é chamada a partir do menu suspenso. Para usar DialogDisplayer também será necessário declarar uma dependência direta em org.openide.dialogs.

  1. Modifique o método actionPerformed(ActionEvent ev) no MyAction.java para abrir uma caixa de diálogo quando My Action é chamada.
    @Override
    public void actionPerformed(ActionEvent ev) {
       FileObject f = context.getPrimaryFile();
       String displayName = FileUtil.getFileDisplayName(f);
       String msg = "This file is " + displayName + ".";
       NotifyDescriptor nd = new NotifyDescriptor.Message(msg);
       DialogDisplayer.getDefault().notify(nd);
    }
  2. Corrija suas importações e confirme que você importou org.openide.filesystems.FileObject. Salve as alterações.

    Quando você corrigiu as importações adicionou uma declaração de importação para org.openide.DialogDisplayer. Agora é necessário declarar a dependência no artefato org.openide.dialogs, uma dependência direta ao invés de uma dependência transitiva.

  3. Clique com o botão direito do mouse no JAR org.openide.dialogs sob o nó Bibliotecas do projeto e escolha Declarar como dependência direta.

Agora é possível testar o módulo para confirmar que a nova ação funciona corretamente.

Nota. Para executar o módulo, é preciso primeiro limpar e desenvolver o módulo.

Captura de tela do arquivo Abc na janela Projetos e aberto no editor

Ao clicar com o botão direito do mouse em um nó no tipo de arquivo abc, verá que My Action é um dos itens no menu suspenso.

Criando uma janela para o Tipo de arquivo

Como padrão, o novo tipo de arquivo será aberto em um editor de texto básico. Caso não deseje usar um editor para o novo tipo de arquivo, você pode criar uma nova janela especificamente para editar o novo tipo de arquivo. Você pode então modificar o componente de janela para suportar outras formas de editar o arquivo, por exemplo, ao tornar a janela um editor visual. Nesta seção você criará um novo componente de janela especificamente para arquivos de seu novo tipo de arquivo.

  1. Clique com o botão direito do mouse no nó do projeto e escolha Nova > Janela.
  2. Selecione editor na lista suspensa e selecione Abrir ao iniciar o aplicativo. Clique em Próximo.
  3. Digite Abc como o prefixo do nome da classe. Clique em Terminar.
  4. Abra AbcDataObject.java no editor e modifique o construtor de classe para usar OpenSupport ao invés de DataEditorSupport.
    public AbcDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException {
        super(pf, loader);
        CookieSet cookies = getCookieSet();
        cookies.add((Node.Cookie) new AbcOpenSupport(getPrimaryEntry()));
    }
  5. Crie a classe AbcOpenSupport que é chamada pelo construtor.

    Tecle Alt-Enter na linha que contém a chamada para AbcOpenSupport para criar AbcOpenSupport no pacote com.mycompany.abcfiletype.

  6. Modifique AbcOpenSupport para estender OpenSupport e implementar OpenCookie e CloseCookie.
    class AbcOpenSupport extends OpenSupport implements OpenCookie, CloseCookie {
  7. Implemente os métodos abstratos (Alt-Enter) e faça as seguintes alterações na classe.
        public AbcOpenSupport(AbcDataObject.Entry entry) {
            super(entry);
        }
    
        @Override
        protected CloneableTopComponent createCloneableTopComponent() {
            AbcDataObject dobj = (AbcDataObject) entry.getDataObject();
            AbcTopComponent tc = new AbcTopComponent();
            tc.setDisplayName(dobj.getName());
            return tc;
        }
  8. Abra AbcTopComponent no editor e modifique a classe para estender CloneableTopComponent ao invés de TopComponent.
    public final class AbcTopComponent extends CloneableTopComponent {
  9. Altere o modificador de classe de privado para público.
    public static AbcTopComponent instance;
  10. Corrija as importações e salve as alterações.

Agora é possível tentar executar o módulo novamente após limpar e desenvolver o projeto.
Captura de tela do arquivo Abc na janela Projetos e aberto no editor

Quando você abre um arquivo abc, este agora será aberto na nova janela ao invés de no editor básico.

Este tutorial demonstrou como criar e executar um módulo NetBeans criado a partir de um arquetipo Maven. Você aprendeu como modificar o POM do projeto para especificar a instalação NetBeans alvo, para que o comando Executar no IDE instale o módulo e inicie uma nova instância do IDE. Você também aprendeu um pouco sobre como trabalhar com tipos de arquivos e DataObjects, mas para obter mais detalhes deveria consultar o Tutorial de tipo de arquivo do NetBeans. Para obter mais exemplos sobre como desenvolver aplicativos e módulos da plataforma NetBeans, consulte os tutoriais listados na Trilha do aprendizado da plataforma NetBeans.

Consulte também

Para obter mais informações sobre a criação e o desenvolvimento de aplicativos, consulte os seguintes recursos.

Sempre que tiver perguntas sobre a plataforma NetBeans, de qualquer tipo, sinta-se a vontade para escrever para a lista de e-mail, dev@platform.netbeans.org, ou visualize o arquivo da lista de e-mail da plataforma NetBeans.