| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml"> |
| <head> |
| <title>Trabalhando com o suíte de módulo NetBeans utilizando o Maven</title> |
| <link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans.css"/> |
| <meta http-equiv="content-type" content="text/html; charset=UTF-8"> |
| <meta name="AUDIENCE" content="NBUSER"/> |
| <meta name="TYPE" content="ARTICLE"/> |
| <meta name="EXPIRES" content="N"/> |
| <meta name="indexed" content="y"/> |
| <meta name="description" content="A short demonstration of how to use Maven to create and run a NetBeans Platform Module Suite."/> |
| <!-- Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. --> |
| <!-- Use is subject to license terms.--> |
| </head> |
| <body> |
| |
| <h1>Trabalhando com o suíte de módulos NetBeans utilizando o Maven</h1> |
| |
| <p>Este documento demonstra como criar uma suíte de módulos da plataforma NetBeans de um arquetipo Maven e como construir e instalar a suíte em sua instalação do IDE. Neste tutorial, será possível criar um projeto de suíte de módulos que contém três módulos NetBeans como subprojetos. O projeto Maven que contém os subprojetos é um projeto POM simples que declara como o suíte é compilado no destino da instalação. |
| |
| </p> |
| |
| <p>Este documento tem base no <a href="https://platform.netbeans.org/tutorials/nbm-selection-1.html">Tutorial de gerenciamento de seleção do NetBeans</a> com base no Ant e ilustra algumas das diferenças entre a utilização do Ant e do Maven para desenvolver uma suíte de módulos da plataforma NetBeans. Após compreender algumas das diferenças, é possível prosseguir com facilidade através dos outros tutoriais na <a href="https://netbeans.org/kb/trails/platform_pt_BR.html">Trilha de aprendizado da plataforma NetBeans</a>.</p> |
| |
| <p class="tips">Caso seja novo na plataforma NetBeans, recomenda-se com ênfase que você assista à série de screencasts <a href="https://platform.netbeans.org/tutorials/nbm-10-top-apis.html">As 10 principais APIs do NetBeans</a>.</p> |
| |
| <p><b>Conteúdo</b></p> |
| <p><img src="../../images/articles/69/netbeans-stamp69.png" class="stamp" width="114" height="114" alt="O conteúdo desta página se aplica ao NetBeans IDE 6.5, 6.7, 6.8" title="O conteúdo desta página se aplica ao NetBeans IDE 6.5, 6.7, 6.8" /></p> |
| |
| <ul class="toc"> |
| <li><a href="#config">Utilizando Maven com o IDE</a> |
| <ul> |
| <li><a href="#config1">Configurando as opções do Maven</a></li> |
| <li><a href="#config2">Visualizando os repositórios Maven</a></li> |
| </ul></li> |
| <li><a href="#01">Criando a suíte de módulos da plataforma NetBeans</a></li> |
| <li><a href="#02">Modificando módulo MyAPI</a> |
| <ul> |
| <li><a href="#02a">Criando uma Classe</a></li> |
| <li><a href="#02b">Especificando os pacotes públicos</a></li> |
| </ul> |
| </li> |
| <li><a href="#03">Criando o módulo MyViewer</a> |
| <ul> |
| <li><a href="#03b">Criando o componente de janela</a></li> |
| </ul> |
| </li> |
| <li><a href="#04">Criando o módulo MyEditor</a> |
| <ul> |
| <li><a href="#04b">Adicionando uma ação</a></li> |
| <li><a href="#04c">Adicionando o componente do editor</a></li> |
| </ul> |
| </li> |
| <li><a href="#05">Construindo e executando a suíte de módulos</a> |
| <ul> |
| <li><a href="#05a">Declarando dependências diretas</a></li> |
| <li><a href="#05b">Especificando a localização da instalação do NetBeans</a></li> |
| <li><a href="#05c">Executando a aplicação</a></li> |
| </ul> |
| </li> |
| <li><a href="#06">Modificando a pesquisa dinamicamente</a></li> |
| </ul> |
| |
| <p><b>Para seguir este tutorial, são necessários os softwares e recursos listados na tabela a seguir.</b></p> |
| |
| <table> |
| <tbody> |
| <tr> |
| <th class="tblheader" scope="col">Software ou recurso</th> |
| <th class="tblheader" scope="col">Versão necessária</th> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="http://download.netbeans.org/netbeans/6.9/beta/">NetBeans IDE</a></td> |
| <td class="tbltd1">versão 6.9</td> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="http://java.sun.com/javase/downloads/index.jsp">Java Developer Kit (JDK)</a></td> |
| <td class="tbltd1">Versão 6</td> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="http://maven.apache.org/">Maven</a></td> |
| <td class="tbltd1">Versão 2.0.9 ou superior</td> |
| </tr> |
| </tbody> |
| </table> |
| |
| <p><strong class="notes">Nota:</strong> não é necessário baixar uma versão avulsa da plataforma NetBeans para desenvolver os aplicativos para a plataforma NetBeans. Normalmente, se desenvolve os aplicativos e módulos no NetBeans IDE e, em seguida, inclui-se somente os módulos necessários para executar a plataforma NetBeans e seu aplicativo.</p> |
| |
| <p>Antes de começar este tutorial, talvez você queira se familiarizar com a documentação a seguir.</p> |
| <ul> |
| <li><a href="http://wiki.netbeans.org/NetBeansDeveloperFAQ">FAQ Desenvolvedor NetBeans</a></li> |
| <li><a href="http://wiki.netbeans.org/MavenBestPractices">Melhores práticas para o Apache Maven no NetBeans 6.x</a></li> |
| <li><a href="http://www.sonatype.com/books/maven-book/reference/introduction.html">Capítulo 1. Introdução ao Apache Maven</a> (do <a href="http://www.sonatype.com/books/maven-book/reference/public-book.html">Maven: o guia definitivo</a>)</li> |
| <li><a href="https://netbeans.org/kb/docs/java/gui-functionality_pt_BR.html">Introdução à construção de GUI</a></li> |
| </ul> |
| |
| |
| |
| |
| |
| |
| |
| <!-- =================================================================== --> |
| <!-- +++++++++++++++ Configuring Maven +++++++++++++++++++++++++++++++++ --> |
| |
| <h2><a name="config"></a>Utilizando Maven com o IDE</h2> |
| <p>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.</p> |
| |
| <div class="indent"> |
| <a name="config1"></a> |
| <h3>Configurando as opções do Maven</h3> |
| <p>É possível utilizar a aba Maven na janela Opções para configurar o comportamento do Maven no IDE e verificar se sua configuração está correta.</p> |
| |
| <ol> |
| <li>Selecione a categoria Miscelâneos na janela Opções e clique na aba Maven.</li> |
| <li>Especifique a localização da instalação local do Maven (requer 2.0.9 ou mais recente).</li> |
| <li>Verifique se a localização do repositório local do Maven está correta.</li> |
| <li>Clique em OK.</li> |
| </ol> |
| <p>Na maioria dos casos, se a configuração do Maven for típica a informação na janela Opções já deve estar correta.</p> |
| |
| <p class="notes"><strong>Nota.</strong> 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.</p> |
| |
| <h3><a name="config2"></a>Visualizando repositórios Maven</h3> |
| <p>Os artefatos que são utilizados 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 o repositório local a partir de um dos repositórios remotos registrados se não estiver instalado.</p> |
| |
| <p>O repositório NetBeans e vários outros repositórios conhecidos Maven indexados são registrados e listados, por padrão, na janela Navegador do repositório. O repositório NetBeans contém a maioria dos artefatos públicos necessários para a construção do seu projeto. É possível utilizar 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 sob os nós repositório NetBeans podem ser adicionados como dependências de projeto, mas nem todos eles estão presentes no local. Eles são adicionados ao repositório local somente quando são declarados como dependências do projeto.</p> |
| |
| <p>Para abrir o navegador do repositório Maven:</p> |
| <ul> |
| <li>Escolha Janela > Outro > Navegador do repositório Maven no menu principal.<br/> |
| <img src="../../images/tutorials/maven-quickstart68/maven-nbm-netbeans-repo.png" alt="Captura de tela do navegador do repositório Maven" title="Captura de tela do navegador do repositório Maven" class="margin-around b-all" /> |
| |
| </li> |
| </ul> |
| </div> |
| |
| |
| |
| <!-- =================================================================== --> |
| <!-- +++++++++++++++++++ Creating the Module Suite +++++++++++++++++++++ --> |
| |
| <h2><a name="01"></a>Criando a suíte de módulos da plataforma NetBeans</h2> |
| <p>Nesta seção, será utilizado o assistente Novo projeto para criar um aplicativo da suíte de módulos da plataforma NetBeans a partir de um arquetipo Maven. O assistente criará um projeto POM que conterá os projetos do módulo. Nesse assistente, será criado um módulo como subprojeto da suíte. |
| </p> |
| |
| <ol> |
| <li>Abra o assistente Novo projeto e escolha suíte de módulos do NetBeans Maven na categoria Maven. Clique em Próximo.</li> |
| <li>Digite <strong>MavenSelectionSuite</strong> como o nome do projeto. Clique em Próximo.</li> |
| <li>Selecione Criar projeto de módulo e digite <strong>MyAPI</strong> para o nome do módulo. Clique em Terminar.</li> |
| </ol> |
| |
| <p>Ao clicar em Terminar, o IDE cria o projeto MavenSelectioneSuite e o subprojeto módulo MyAPI NetBeans.<br/> |
| <img src="../../images/tutorials/maven-suite/maven-suite-projectswindow.png" alt="Captura de tela da janela Projetos" title="Captura de tela da janela Projetos" class="margin-around b-all" /> |
| </p> |
| |
| <p>MavenSelectionSuite é um projeto POM que é um contêiner para subprojetos, nesse caso projetos de módulo NetBeans. O projeto POM não contém nenhum arquivo de código-fonte. O projeto POM contém instruções para compilar a suíte, e se observar o POM para o projeto é possível visualizar que <tt>pom</tt> é específico para o pacote.</p> |
| <pre class="examplecode"> <modelVersion>4.0.0</modelVersion> |
| <groupId>com.mycompany</groupId> |
| <artifactId>MavenSelectionSuite</artifactId> |
| <strong><packaging>pom</packaging></strong> |
| <version>1.0-SNAPSHOT</version> |
| <name>MavenSelectionSuite Netbeans Module Suite</name> |
| ... |
| <properties> |
| <netbeans.version>RELEASE69</netbeans.version> |
| </properties> |
| <strong><modules> |
| <module>MyAPI</module> |
| </modules></strong> |
| </project></pre> |
| <p>O POM também contém uma lista de módulos que serão incluídos ao construir o projeto POM. É possível visualizar que o projeto MyAPI está listado como módulo.</p> |
| |
| <p>Se expandir o nó módulo na janela Projetos, será possível visualizar que o projeto MyAPI está listado como um módulo. Na janela Arquivos, é possível visualizar que o diretório do projetoMyAPI está localizado no diretório <tt>MavenSelectionSuite</tt>. Ao criar um novo projeto no diretório de um projeto POM, o IDE adiciona automaticamente o projeto na lista de módulos no POM que estão incluídos ao construir e executar o projeto POM.</p> |
| |
| <!--<p>The project also contains other XML files containing metadata about the project such as <tt>profiles.xml</tt>. |
| The <tt>profiles.xml</tt> file specifies the path to the NetBeans installation and is used by the IDE when running the project. |
| --> |
| |
| <p class="tips">Ao criar uma suíte de módulos da plataforma NetBeans do arquetipo Maven, não é necessário especificar o destino da instalação da plataforma NetBeans no assistente Novo projeto, assim como ao utilizar o Ant. Para visualizar a instalação da plataforma NetBeans é necessário modificar o elemento <tt><netbeans.installation></tt> no arquivo de projeto POM <tt>profiles.xml</tt> e especificar explicitamente o caminho para a instalação da plataforma NetBeans. Para mais, consulte a seção <a href="#05b">Especificando a localização da instalação do NetBeans</a> neste tutorial.</p> |
| <!--see https://netbeans.org/bugzilla/show_bug.cgi?id=185941.--> |
| |
| |
| |
| <!-- =================================================================== --> |
| <!-- ++++++++++++++++++ Adding Class to MyAPI Module +++++++++++++++++++ --> |
| |
| <h2><a name="02"></a>Modificando o módulo MyAPI</h2> |
| <p>O módulo MyAPI foi criado ao criar a suíte de módulos, mas não é necessário criar uma classe no módulo e expor a classe para outros módulos.</p> |
| |
| <div class="indent"> |
| <a name="02a"></a> |
| <h3>Criando uma classe no módulo MyAPI</h3> |
| <p>Neste exercício, será criada uma classe simples nomeada <tt>APIObject</tt>. Cada instância do <tt>APIObject</tt> será único, porque o campo <tt>índice</tt> foi incrementado por 1 cada vez que uma nova instância de <tt>APIObject</tt> é criada.</p> |
| <ol> |
| <li>Expanda o pacote MyAPI na janela Projetos.</li> |
| <li>Clique com o botão direito do mouse no nó Pacotes de fontes e escolha Novo > Classe Java.</li> |
| <li>Digite <strong>APIObject</strong> como nome da classe e selecione <tt>com.mycompany.mavenselectionsuite</tt> da lista suspensa Pacote. Clique em Terminar.</li> |
| <li>Modifique a classe para declarar alguns campos e adicione os métodos simples a seguir. |
| <pre class="examplecode"> |
| public final class APIObject { |
| |
| private final Date date = new Date(); |
| private static int count = 0; |
| private final int index; |
| |
| public APIObject() { |
| index = count++; |
| } |
| |
| public Date getDate() { |
| return date; |
| } |
| |
| public int getIndex() { |
| return index; |
| } |
| |
| public String toString() { |
| return index + " - " + date; |
| } |
| |
| }</pre> |
| </li> |
| <li>Corrija as importações e salve as alterações.</li> |
| </ol> |
| |
| <a name="02b"></a> |
| <h3>Especificando os pacotes públicos</h3> |
| <p>Neste tutorial, serão criados módulos adicionais que necessitarão acessar os métodos no <tt>APIObject</tt>. Neste exercício, os conteúdos do módulo público MyAPI serão criados para que outros módulos possam acessar os métodos. Para declarar o pacote <tt>com.mycompany.mavenselectionsuite</tt> como público, é necessário modificar o elemento <tt>configuração</tt> do <tt>nbm-maven-plugin</tt> no POM a fim de especificar os pacotes que são exportados como públicos. É possível efetuar as alterações ao POM no editor ao selecionar os pacotes para tornar público na janela Propriedades do projeto.</p> |
| |
| <ol> |
| <li>Clique com o botão direito do mouse no nó do projeto e escolha Propriedades para abrir a janela Propriedades.</li> |
| <li>Selecione o pacote <strong>com.mycompany.mavenselectionsuite</strong> na categoria <strong>Pacotes públicos</strong>. Clique em OK. <img src="../../images/tutorials/maven-suite/maven-suite-publicpackages.png" alt="Captura de tela de pacotes públicos na janela Propriedades" title="Pacotes públicos na janela Propriedades" class="margin-around b-all" /> |
| <p>Ao selecionar um pacote para exportar, o IDE modifica o elemento <tt>nbm-maven-plugin</tt> no POM para especificar o pacote.</p> |
| <pre class="examplecode"><plugin> |
| <groupId>org.codehaus.mojo</groupId> |
| <artifactId>nbm-maven-plugin</artifactId> |
| <extensions>true</extensions> |
| <configuration> |
| <publicPackages> |
| <strong><publicPackage>com.mycompany.mavenselectionsuite</publicPackage></strong> |
| </publicPackages> |
| </configuration> |
| </plugin></pre></li> |
| <li>Clique com o botão direito do mouse no projeto e escolha Construir.</li> |
| </ol> |
| |
| <p>Ao construir o projeto, o <tt>nbm-maven-plugin</tt> gerará um cabeçalho de manifesto no <tt>MANIFEST.MF</tt> do JAR, que especifica os pacotes públicos.</p> |
| |
| <p class="tips">Para mais informações, consulte o <a href="http://mojo.codehaus.org/nbm-maven-plugin/manifest-mojo.html#publicPackages">manifesto de documentação nbm-maven-plugin</a>.</p> |
| </div> |
| |
| <!-- =================================================================== --> |
| <!-- ++++++++++++++++++ Creating the MyViewer Module +++++++++++++++++++ --> |
| |
| <h2><a name="03"></a>Criando o módulo MyViewer</h2> |
| <p>Nesta seção, um novo módulo nomeado MyViewer será criado e um componente de janela será adicionado em dois campos de texto. O componente implementará <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-util-lookup/org/openide/util/LookupListener.html">LookupListener</a></tt> para alertar as alterações no<a href="http://wiki.netbeans.org/DevFaqLookup">Lookup</a>.</p> |
| |
| <div class="indent"> |
| <h3><a name="03a"></a>Criando o módulo</h3> |
| <p>Neste exercício, será criado o módulo MyViewer no diretório <tt>MavenSelectionSuite</tt>.</p> |
| |
| <ol> |
| <li>Escolha Arquivo > Novo projeto do menu principal (Ctrl-Shift-N).</li> |
| <li>Selecione o módulo NetBeans Maven da categoria Maven. Clique em Próximo.</li> |
| <li>Digite <strong>MyViewer</strong> como o nome do projeto.</li> |
| <li>Confirme se a localização do projeto é o diretório <tt>MavenSelectionSuite</tt>. Clique em Terminar.</li> |
| <li>Clique com o botão direito do mouse no nó Bibliotecas na janela Projetos e escolha Adicionar dependência.</li> |
| <li>Selecione o módulo NetBeans MyAPI na aba Abrir projetos. Clique em OK.<br/> |
| <img src="../../images/tutorials/maven-suite/maven-suite-addapi.png" alt="Captura de tela de pacotes públicos na janela Propriedades" title="Pacotes públicos na janela Propriedades" class="margin-around b-all" /> |
| </li> |
| </ol> |
| |
| <p>Ao clicar em OK, o IDE adiciona artefatos para a lista de dependências no POM e exibe o artefato abaixo do nó Bibliotecas.</p> |
| |
| <p>Ao observar o POM do módulo MyViewer, é possível perceber que o projeto principal para o módulo é MavenSelectionSuite, que <tt>nbm</tt> e especificado para <tt>empacotamento</tt> e que o <strong>nbm-maven-plugin</strong> será utilizado para construir o projeto como módulo NetBeans.</p> |
| |
| <pre class="examplecode"> |
| <modelVersion>4.0.0</modelVersion> |
| <strong><parent> |
| <groupId>com.mycompany</groupId> |
| <artifactId>MavenSelectionSuite</artifactId> |
| <version>1.0-SNAPSHOT</version> |
| </parent></strong> |
| <groupId>com.mycompany</groupId> |
| <artifactId>MyViewer</artifactId> |
| <strong><packaging>nbm</packaging></strong> |
| <version>1.0-SNAPSHOT</version> |
| <name>MyViewer NetBeans Module</name> |
| </pre> |
| |
| |
| <a name="03b"></a> |
| <h3>Criando o componente de janela</h3> |
| <p>Neste exercício, um componente de janela será criado e dois campos de texto adicionados.</p> |
| <ol> |
| <li>Clique com o botão direito do mouse no projeto MyViewer e escolha Nova > Janela.</li> |
| <li>Selecione <strong>navegador</strong> da lista suspensa e selecione Abrir em Iniciar aplicativo. Clique em Próximo.</li> |
| <li>Digite <strong>MyViewer</strong> como prefixo do nome da classe. Clique em Terminar.</li> |
| <li>Arraste dois rótulos da Paleta para o componente e altere o texto do topo do rótulo para <tt>"[nothing selected]"</tt>.<br/> |
| <img src="../../images/tutorials/maven-suite/maven-suite-myviewertopcomponent.png" alt="Captura de tela do componente de janela" title="Campos de texto no componente Janela" class="margin-around b-all" /> |
| |
| </li> |
| <li>Clique na aba Código-fonte e modifique a assinatura de classe para implementar <tt>LookupListener</tt>. |
| <pre class="examplecode">classe pública MyViewerTopComponent estende TopComponent <strong>implemente LookupListener</strong> {</pre></li> |
| <li>Implemente os métodos abstratos ao colocar o cursor de inserção na linha e pressionar as teclas Alt-Enter.</li> |
| <li>Adicione o campo <tt>privado</tt> <tt>resultado</tt> e defina o valor inicial como nulo. |
| <pre class="examplecode">private Lookup.Result result = null;</pre></li> |
| <li>Efetue as mudanças a seguir para os métodos <tt>componentOpened()</tt>, <tt>componentClosed()</tt> e <tt>resultChanged()</tt>. |
| <pre class="examplecode"> |
| public void componentOpened() { |
| <strong>result = Utilities.actionsGlobalContext().lookupResult(APIObject.class); |
| result.addLookupListener(this);</strong> |
| } |
| |
| public void componentClosed() { |
| <strong>result.removeLookupListener (this); |
| result = null;</strong> |
| } |
| |
| public void resultChanged(LookupEvent le) { |
| <strong>Lookup.Result r = (Lookup.Result) le.getSource(); |
| Collection c = r.allInstances(); |
| if (!c.isEmpty()) { |
| APIObject o = (APIObject) c.iterator().next(); |
| jLabel1.setText (Integer.toString(o.getIndex())); |
| jLabel2.setText (o.getDate().toString()); |
| } else { |
| jLabel1.setText("[no selection]"); |
| jLabel2.setText (""); |
| }</strong> |
| }</pre> |
| <p>Ao utilizar <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-util/org/openide/util/Utilities.html#actionsGlobalContext%28%29">Utilities.actionsGlobalContext()</a></tt>, toda vez que o componente é aberto a classe é capaz de alertar globalmente para o objeto de Pesquisa do componente que tem o foco. A Pesquisa é removida quando o componente é finalizado. O método <tt>resultChanged()</tt> implementa o <tt>LookupListener</tt> de forma que o JLabels do formulário seja atualizado de acordo com o <tt>APIObject</tt> que possui o foco.</p> |
| </li> |
| <li>Corrija as importações e assegure-se de adicionar <strong><tt>org.openide.util.Utilities</tt></strong>. Salve as alterações.</li> |
| </ol> |
| </div> |
| |
| |
| |
| <!-- =================================================================== --> |
| <!-- ++++++++++++++++++ Creating the MyEditor Module +++++++++++++++++++ --> |
| |
| <h2><a name="04"></a>Criando o módulo MyEditor</h2> |
| |
| <p>Nesta seção, um novo módulo chamado MyEditor será criado. O módulo conterá um <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-windows/org/openide/windows/TopComponent.html">TopComponent</a></tt> que oferecerá instâncias de <tt>APIObject</tt> através da Pesquisa. Também será criada uma ação que abrirá novas instâncias do componente MyEditor.</p> |
| |
| <div class="indent"> |
| <a name="04a"></a> |
| <h3>Criando o módulo</h3> |
| <p>Neste exercício, um módulo NetBeans será criado no diretório <tt>MavenSelectionSuite</tt> e uma dependência será adicionada no módulo API.</p> |
| <ol> |
| <li>Escolha Arquivo > Novo projeto no menu principal.</li> |
| <li>Selecione o módulo NetBeans Maven da categoria Maven. Clique em Próximo.</li> |
| <li>Digite <strong>MyEditor</strong> como nome do projeto.</li> |
| <li>Confirme se a localização do projeto é o diretório <tt>MavenSelectionSuite</tt>. Clique em Terminar.</li> |
| <li>Clique com o botão direito do mouse no nó Bibliotecas na janela Projetos e escolha Adicionar dependência.</li> |
| <li>Selecione o módulo NetBeans MyAPI na aba Abrir projetos. Clique em OK.</li> |
| </ol> |
| |
| <a name="04b"></a> |
| <h3>Adicionando uma ação</h3> |
| <p>Neste exercício, será criada uma classe para adicionar um item de menu ao menu Arquivo para abrir um componente nomeado MyEditor. O componente será criado no próximo exercício.</p> |
| <!-- issue: https://netbeans.org/bugzilla/show_bug.cgi?id=186876 |
| In this section you need to create the action first, then the component. |
| If the component is created first, the New Action wizard will choke on what looks like |
| a lockedFile exception on the bundle.properties and the entries for the action are not generated in layer.xml.--> |
| |
| <ol> |
| <li>Clique com o botão direito do mouse no projeto MyEditor e escolha Novo > Ação para abrir a caixa de diálogo Nova ação.</li> |
| <li>Selecione sempre habilitado. Clique em Próximo.</li> |
| <li>Mantenha os padrões na página Registro de GUI. Clique em Próximo.</li> |
| <li>Digite <strong>OpenEditorAction</strong> para o nome da classe.</li> |
| <li>Digite <strong>Open Editor</strong> para o nome de exibição. Clique em Terminar. |
| |
| <p>O IDE abre a classe <tt>OpenEditorAction</tt> no editor e adiciona o seguinte no arquivo <tt>layer.xml</tt>.</p> |
| <pre class="examplecode"> |
| <filesystem> |
| <folder name="Actions"> |
| <folder name="Build"> |
| <file name="com-mycompany-myeditor-OpenEditorAction.instance"> |
| <attr name="delegate" newvalue="com.mycompany.myeditor.OpenEditorAction"/> |
| <attr name="displayName" bundlevalue="com.mycompany.myeditor.Bundle#CTL_OpenEditorAction"/> |
| <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/> |
| <attr name="noIconInMenu" boolvalue="false"/> |
| </file> |
| </folder> |
| </folder> |
| <folder name="Menu"> |
| <folder name="File"> |
| <file name="com-mycompany-myeditor-OpenEditorAction.shadow"> |
| <attr name="originalFile" stringvalue="Actions/Build/com-mycompany-myeditor-OpenEditorAction.instance"/> |
| <attr name="position" intvalue="0"/> |
| </file> |
| </folder> |
| </folder> |
| </filesystem></pre></li> |
| <li>Modifique a classe <tt>OpenEditorAction</tt> para modificar o método <tt>actionPerformed</tt>. |
| <pre class="examplecode">public void actionPerformed(ActionEvent e) { |
| MyEditor editor = new MyEditor(); |
| editor.open(); |
| editor.requestActive(); |
| }</pre></li> |
| </ol> |
| |
| |
| <a name="04c"></a> |
| <h3>Adicionando o componente de editor</h3> |
| <p>Neste exercício, será criado um componente MyEditor que abre na área do editor quando invocado pelo <tt>OpenEditorAction</tt>. Um modelo de componente de janela não será utilizado porque você desejará várias instâncias do componente e o componente da janela é utilizado para criar componentes singleton. Em vez disso, será utilizado um modelo de forma JPanel e, em seguida, a classe será modificada para estender <tt>TopComponent</tt>.</p> |
| |
| |
| <ol> |
| <li>Clique com o botão direito do mouse em Pacotes de código-fonte e escolha Novo > Outro e selecione Formulário JPanel na categoria Formulários Swing de GUI. Clique em Próximo.</li> |
| <li>Digite <strong>MyEditor</strong> para nome de classe e selecione o pacote <tt>com.mycompany.myeditor</tt>. Clique em Terminar.</li> |
| <li>Arraste dois campos de texto para o componente.</li> |
| <li>Torne os campos de texto em somente leitura ao desmarcar a propriedade <tt>editável</tt> para cada campo de texto.<br/> |
| <img src="../../images/tutorials/maven-suite/maven-suite-editableprop.png" alt="Captura de tela da propriedade Editável para rótulos" title="Propriedade Editável para rótulos" class="margin-around b-all" /> |
| |
| </li> |
| <li>Clique na aba Código-fonte e modifique a assinatura de classe para estender <tt>TopComponent</tt> no lugar de <tt>javax.swing.JPanel</tt>. |
| <pre class="examplecode">classe pública MyEditor estende <strong>TopComponent</strong></pre></li> |
| <li>Coloque o cursor de inserção na assinatura e pressione Alt-Enter para consertar o erro no código, localizando o repositório Maven e adicionando uma dependência no artefato <tt>org.openide.windows</tt>. Corrija suas importações.<br/> |
| <img src="../../images/tutorials/maven-suite/maven-suite-add-topcomponent.png" alt="Captura de tela da propriedade Editável para rótulos" title="Propriedade Editável para rótulos" class="margin-around b-all" /> |
| |
| </li> |
| <li>Modifique o construtor para criar uma nova instância de <tt>APIObject</tt> toda vez que a classe é invocada. |
| <pre class="examplecode"> |
| public MyEditor() { |
| initComponents(); |
| <strong>APIObject obj = new APIObject(); |
| associateLookup(Lookups.singleton(obj)); |
| jTextField1.setText("APIObject #" + obj.getIndex()); |
| jTextField2.setText("Created: " + obj.getDate()); |
| setDisplayName("MyEditor " + obj.getIndex());</strong> |
| |
| }</pre> |
| <p>A linha <tt>associateLookup(Lookups.singleton(obj));</tt> no construtor criará uma Pesquisa que contém a nova instância de <tt>APIObject</tt>.</p></li> |
| <li>Corrija suas importações e salve as alterações.</li> |
| </ol> |
| <p>Os campos de texto no componente exibem somente o valor do índice e a data do <tt>APIObject</tt>. Isso possibilitará que você perceba que cada componente MyEditor é único e que o MyViewer está exibindo os detalhes do componente MyEditor que possui o foco.</p> |
| |
| <p class="notes"><strong>Nota.</strong> Os erros no <tt>OpenEditorAction</tt> serão resolvidos após salvar as alterações no <tt>MyEditor</tt>. </p> |
| </div> |
| |
| |
| |
| <!-- =================================================================== --> |
| <!-- ++++++++++++++++ Building and Running the Module +++++++++++++++++ --> |
| |
| <h2><a name="05"></a>Construindo e executando a suíte de módulos</h2> |
| <p>Nesse momento, você está quase pronto para executar a suíte para verificar se ela constroi, instala e se comporta corretamente.</p> |
| <div class="indent"> |
| |
| |
| <a name="05a"></a> |
| <h3>Declarando dependências diretas</h3> |
| <p>Antes de poder construir e executar a suíte necessária para modificar uma das dependências do projeto MyEditor. Se tentar construir a suíte de módulos agora, a saída de construção na janela Saída informará que a suíte não pode compilar porque o módulo MyEditor requer que o artefato <tt>org.openide.util-lookup</tt> esteja disponível no tempo de execução.</p> |
| |
| <p>Se clicar com o botão direito do mouse no nó do projeto e escolher Mostrar gráfico de dependência, o visualizador gráfico da dependência poderá lhe ajudar a visualizar as dependências de módulo.</p> |
| <img src="../../images/tutorials/maven-suite/maven-suite-dependency-graph.png" alt="Captura de tela do gráfico de dependência do artefato" title="gráfico de dependência do artefato" class="margin-around b-all" /> |
| |
| <p>É possível visualizar que o MyEditor não tem uma dependência direta no <tt>org.openide.util-lookup</tt>. A dependência é transitiva e o artefato está disponível para o projeto no momento da compilação, mas as dependências necessitam ser diretas se o artefato estiver disponível no tempo de execução. É necessário modificar o POM para declarar o artefato como dependência direta.</p> |
| |
| <p>É possível transformar o artefato em uma dependência direta editando manualmente o POM ou utilizando o item de menu pop-up na janela Projetos.</p> |
| |
| <ol> |
| <li>Expanda o nó Bibliotecas do módulo MyEditor.</li> |
| <li>Clique com o botão direito do mouse no artefato <tt>org.openide.util-lookup</tt> e escolha Declarar como dependência direta. |
| <p>Ao escolher Declarar como dependência direta, o IDE modifica o POM para adicionar o artefato como uma dependência.</p> |
| </li> |
| </ol> |
| <p class="notes"><strong>Nota.</strong> O artefato <tt>org.openide.util-lookup</tt> já é uma dependência direta do módulo MyViewer.</p> |
| |
| |
| <a name="05b"></a> |
| <h3>Especificando a localização da instalação do NetBeans</h3> |
| <p>Como padrão, nenhum destino de instalação do NetBeans é especificado quando o arquetipo Maven é utilizado para criar uma plataforma de suíte de módulos NetBeans. Para instalar e executar a suíte de módulo em uma instalação do IDE, é necessário especificar o caminho para a instalação do diretório, editando o arquivo <tt>profiles.xml</tt> no projeto POM.</p> |
| <ol> |
| <li>Expanda o nó Arquivos de projeto no aplicativo MavenSelectionSuite e clique duas vezes em <tt>profiles.xml</tt> para abrir o arquivo no editor.</li> |
| <li>Modificando o elemento <tt><netbeans.installation></tt> para especificar o caminho para a plataforma NetBeans de destino e salve as alterações. |
| <pre class="examplecode"> |
| <profile> |
| <id>netbeans-ide</id> |
| <properties> |
| <netbeans.installation>/home/me/netbeans-6.9</netbeans.installation> |
| </properties> |
| </profile></pre> |
| <p class="notes"><strong>Nota.</strong> O caminho necessita especificar o diretório que contém o diretório <tt>bin</tt> contendo o arquivo executável.</p> |
| <p>Por exemplo, no sistema operacional X, o caminho pode se assemelhar ao seguinte.</p> |
| <pre class="examplecode"><netbeans.installation>/Applications/NetBeans/NetBeans6.9.app/Contents/Resources/NetBeans</netbeans.installation></pre> |
| </li> |
| </ol> |
| |
| |
| |
| <a name="05c"></a> |
| <h3>Executando o aplicativo</h3> |
| <p>Agora que o destino da instalação do IDE foi especificado, é possível utilizar o comando Executar no projeto suíte.</p> |
| |
| <ol> |
| <li>Clique com o botão direito do mouse em MavenSelectionSuite e escolha Executar.</li> |
| </ol> |
| <p>Ao escolher Executar, uma instância do IDE será iniciada com a suíte de módulos instalada.</p> |
| <img src="../../images/tutorials/maven-suite/maven-suite-run1.png" alt="Captura de tela das janelas MyViewer e MyEditor" title="Janelas MyViewer e MyEditor" class="margin-around b-all" /> |
| <p>A janela MyEditor abrirá quando o aplicativo for iniciado e exibirá os dois rótulos de texto. Para abrir um componente MyEditor na área do editor, é possível escolher Abrir editor no menu Arquivo. A janela MyViewer exibirá os detalhes do componente MyEditor que possui o foco.</p> |
| <p>A ação Executar para o projeto suíte de módulos é configurado, como padrão, para utilizar o plug-in Reator, a fim de construir recursivamente e empacotar os módulos que estão especificados como parte da suíte. É possível abrir a janela Propriedades do projeto para visualizar as metas do Maven, que são mapeadas para ações no IDE. |
| </p> |
| <img src="../../images/tutorials/maven-suite/maven-suite-run-action.png" alt="Captura de tela das janelas MyViewer e MyEditor" title="Janelas MyViewer e MyEditor" class="margin-around b-all" /> |
| <p>Na categoria Ações, na janela Propriedades, é possível visualizar as metas que são mapeadas para a ação Executar.</p> |
| </div> |
| |
| |
| |
| |
| <!-- =================================================================== --> |
| <!-- ++++++++++++++++ Modifying the Lookup with Button +++++++++++++++++ --> |
| |
| <h2><a name="06"></a>Modificando a Pesquisa dinamicamente</h2> |
| <p>Atualmente, um novo <tt>APIObject</tt> é criado toda vez que um novo componente MyEditor é aberto. Nesta seção, um botão será adicionado ao componente MyEditor, que substituirá o atual <tt>APIObject</tt> do componente com um novo. Será modificado o código para utilizar <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-util-lookup/org/openide/util/lookup/InstanceContent.html">InstanceContent</a></tt> a fim de manipular dinamicamente alterações ao conteúdo de Pesquisa.</p> |
| <ol> |
| <li>Expanda o projeto MyEditor e abra o formulário <tt>MyEditor</tt> na visualização Desenho do editor.</li> |
| <li>Arraste um botão para o formulário e defina o texto do botão como "Substituir".</li> |
| <li>Clique com o botão direito do mouse e escolha Eventos > Ações > actionPerformed para criar um método do manipulador de eventos para o botão e abrir o formulário no editor de código-fonte.</li> |
| <li>Adicione o campo <tt>final</tt> a seguir para a classe. |
| <pre class="examplecode">public class MyEditor extends TopComponent { |
| <strong>private final InstanceContent content = new InstanceContent();</strong></pre> |
| |
| <p>Para obter benefícios do <tt>InstanceContent</tt> será necessário utilizar <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-util-lookup/org/openide/util/lookup/AbstractLookup.html#AbstractLookup%28org.openide.util.lookup.AbstractLookup.Content%29">AbstractLookup</a></tt> em vez de <tt>Lookup</tt> no construtor.</p> |
| </li> |
| <li>Modifique o corpo do método do manipulador de eventos <tt>jButton1ActionPerformed</tt> para ter a seguinte aparência ao copiar as linhas do construtor de classe e adicionar a chamada para <tt>content.set</tt>. |
| <pre class="examplecode">private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { |
| <strong>APIObject obj = new APIObject(); |
| jTextField1.setText ("APIObject #" + obj.getIndex()); |
| jTextField2.setText ("Created: " + obj.getDate()); |
| setDisplayName ("MyEditor " + obj.getIndex()); |
| content.set(Collections.singleton (obj), null);</strong> |
| }</pre> |
| </li> |
| <li>Modifique o construtor para remover as linhas que foram copiadas para o manipulador de eventos, altere <tt>associateLookup</tt> para utilizar <tt>AbstractLookup</tt> e adicione <tt>jButton1ActionPerformed(null);</tt>. O construtor deveria ter a seguinte aparência. |
| <pre class="examplecode">public MyEditor() { |
| initComponents(); |
| <strong>associateLookup(new AbstractLookup(content)); |
| jButton1ActionPerformed(null);</strong> |
| }</pre> |
| <p>Foi adicionado <tt>jButton1ActionPerformed(null);</tt> ao construtor para assegurar que o componente será inicializado quando criado.</p></li> |
| <li>Corrija as importações e salve as alterações.</li> |
| </ol> |
| |
| |
| <p>Ao executar o projeto da suíte de módulos novamente, será possível visualizar o novo botão em cada componente MyEditor. Ao clicar no botão, o número do índice no texto será aumentado. O rótulo na janela MyViewer também será atualizada para corresponder ao novo valor.</p> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <p>Este tutorial demonstrou como criar e executar uma suíte de módulos da plataforma NetBeans, que você criou a partir de um arquetipo Maven. Você viu como a suíte de módulos são estruturadas e como configurar um módulo POM para especificar os pacotes públicos. Também aprendeu como modificar o projeto POM principal para especificar o destino da instalação do NetBeans, para que o comando Executar no IDE instale a suíte e inicie uma nova instância da Plataforma. Para mais exemplos sobre como construir aplicativos e módulos na Plataforma NetBeans, consulte os tutoriais listados na <a href="https://netbeans.org/kb/trails/platform_pt_BR.html">Trilha do aprendizado do NetBeans</a>.</p> |
| |
| |
| <!-- ======================================================================================== --> |
| |
| |
| <h2><a name="nextsteps"></a>Consulte também</h2> |
| |
| <p>Para mais informações sobre como criar e desenvolver na Plataforma NetBeans, consulte os recursos a seguir.</p> |
| <ul> |
| <li><a href="https://netbeans.org/kb/trails/platform_pt_BR.html">Trilha do aprendizado da plataforma NetBeans</a></li> |
| <li><a href="http://wiki.netbeans.org/NetBeansDeveloperFAQ">FAQ Desenvolvedor NetBeans</a></li> |
| <li><a href="http://bits.netbeans.org/dev/javadoc/">Javadoc da API da NetBeans </a></li> |
| </ul> |
| <p>Se você tiver qualquer dúvida sobre a Plataforma NetBeans, sinta-se a vontade para escrever para a lista de correspondência, dev@platform.netbeans.org, ou consulte o <a href="https://netbeans.org/projects/platform/lists/dev/archive">arquivo de lista de correspondência NetBeans</a>.</p> |
| |
| |
| <!-- ======================================================================================== --> |
| |
| |
| |
| </body> |
| |
| </html> |