blob: 4b5f3083bbc6c6e2c6de8015d2fe691d8f3b75ac [file] [log] [blame]
<!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&iacute;te de m&oacute;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&iacute;te de m&oacute;dulos NetBeans utilizando o Maven</h1>
<p>Este documento demonstra como criar uma su&iacute;te de m&oacute;dulos da plataforma NetBeans de um arquetipo Maven e como construir e instalar a su&iacute;te em sua instala&ccedil;&atilde;o do IDE. Neste tutorial, ser&aacute; poss&iacute;vel criar um projeto de su&iacute;te de m&oacute;dulos que cont&eacute;m tr&ecirc;s m&oacute;dulos NetBeans como subprojetos. O projeto Maven que cont&eacute;m os subprojetos &eacute; um projeto POM simples que declara como o su&iacute;te &eacute; compilado no destino da instala&ccedil;&atilde;o.
</p>
<p>Este documento tem base no <a href="https://platform.netbeans.org/tutorials/nbm-selection-1.html">Tutorial de gerenciamento de sele&ccedil;&atilde;o do NetBeans</a> com base no Ant e ilustra algumas das diferen&ccedil;as entre a utiliza&ccedil;&atilde;o do Ant e do Maven para desenvolver uma su&iacute;te de m&oacute;dulos da plataforma NetBeans. Ap&oacute;s compreender algumas das diferen&ccedil;as, &eacute; poss&iacute;vel prosseguir com facilidade atrav&eacute;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 &ecirc;nfase que voc&ecirc; assista &agrave; s&eacute;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&uacute;do</b></p>
<p><img src="../../images/articles/69/netbeans-stamp69.png" class="stamp" width="114" height="114" alt="O conte&uacute;do desta p&aacute;gina se aplica ao NetBeans IDE 6.5, 6.7, 6.8" title="O conte&uacute;do desta p&aacute;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&ccedil;&otilde;es do Maven</a></li>
<li><a href="#config2">Visualizando os reposit&oacute;rios Maven</a></li>
</ul></li>
<li><a href="#01">Criando a su&iacute;te de m&oacute;dulos da plataforma NetBeans</a></li>
<li><a href="#02">Modificando m&oacute;dulo MyAPI</a>
<ul>
<li><a href="#02a">Criando uma Classe</a></li>
<li><a href="#02b">Especificando os pacotes p&uacute;blicos</a></li>
</ul>
</li>
<li><a href="#03">Criando o m&oacute;dulo MyViewer</a>
<ul>
<li><a href="#03b">Criando o componente de janela</a></li>
</ul>
</li>
<li><a href="#04">Criando o m&oacute;dulo MyEditor</a>
<ul>
<li><a href="#04b">Adicionando uma a&ccedil;&atilde;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&iacute;te de m&oacute;dulos</a>
<ul>
<li><a href="#05a">Declarando depend&ecirc;ncias diretas</a></li>
<li><a href="#05b">Especificando a localiza&ccedil;&atilde;o da instala&ccedil;&atilde;o do NetBeans</a></li>
<li><a href="#05c">Executando a aplica&ccedil;&atilde;o</a></li>
</ul>
</li>
<li><a href="#06">Modificando a pesquisa dinamicamente</a></li>
</ul>
<p><b>Para seguir este tutorial, s&atilde;o necess&aacute;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&atilde;o necess&aacute;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&atilde;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&atilde;o 6</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://maven.apache.org/">Maven</a></td>
<td class="tbltd1">Vers&atilde;o 2.0.9 ou superior</td>
</tr>
</tbody>
</table>
<p><strong class="notes">Nota:</strong> n&atilde;o &eacute; necess&aacute;rio baixar uma vers&atilde;o avulsa da plataforma NetBeans para desenvolver os aplicativos para a plataforma NetBeans. Normalmente, se desenvolve os aplicativos e m&oacute;dulos no NetBeans IDE e, em seguida, inclui-se somente os m&oacute;dulos necess&aacute;rios para executar a plataforma NetBeans e seu aplicativo.</p>
<p>Antes de come&ccedil;ar este tutorial, talvez voc&ecirc; queira se familiarizar com a documenta&ccedil;&atilde;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&aacute;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&iacute;tulo 1. Introdu&ccedil;&atilde;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&ccedil;&atilde;o &agrave; constru&ccedil;&atilde;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&ccedil;&otilde;es de configura&ccedil;&otilde;es e com o navegador do reposit&oacute;rio Maven.</p>
<div class="indent">
<a name="config1"></a>
<h3>Configurando as op&ccedil;&otilde;es do Maven</h3>
<p>&Eacute; poss&iacute;vel utilizar a aba Maven na janela Op&ccedil;&otilde;es para configurar o comportamento do Maven no IDE e verificar se sua configura&ccedil;&atilde;o est&aacute; correta.</p>
<ol>
<li>Selecione a categoria Miscel&acirc;neos na janela Op&ccedil;&otilde;es e clique na aba Maven.</li>
<li>Especifique a localiza&ccedil;&atilde;o da instala&ccedil;&atilde;o local do Maven (requer 2.0.9 ou mais recente).</li>
<li>Verifique se a localiza&ccedil;&atilde;o do reposit&oacute;rio local do Maven est&aacute; correta.</li>
<li>Clique em OK.</li>
</ol>
<p>Na maioria dos casos, se a configura&ccedil;&atilde;o do Maven for t&iacute;pica a informa&ccedil;&atilde;o na janela Op&ccedil;&otilde;es j&aacute; deve estar correta.</p>
<p class="notes"><strong>Nota.</strong> O suporte ao Maven &eacute; ativado como parte do conjunto de recursos do Java SE. Se a aba Maven n&atilde;o estiver dispon&iacute;vel na janela Op&ccedil;&otilde;es, confirme se o Java SE est&aacute; ativado ao criar um aplicativo Java.</p>
<h3><a name="config2"></a>Visualizando reposit&oacute;rios Maven</h3>
<p>Os artefatos que s&atilde;o utilizados pelo Maven para construir todos os seus projetos s&atilde;o armazenados em seu reposit&oacute;rio local Maven. Quando um artefato &eacute; declarado como uma depend&ecirc;ncia do projeto, o artefato &eacute; baixado para o reposit&oacute;rio local a partir de um dos reposit&oacute;rios remotos registrados se n&atilde;o estiver instalado.</p>
<p>O reposit&oacute;rio NetBeans e v&aacute;rios outros reposit&oacute;rios conhecidos Maven indexados s&atilde;o registrados e listados, por padr&atilde;o, na janela Navegador do reposit&oacute;rio. O reposit&oacute;rio NetBeans cont&eacute;m a maioria dos artefatos p&uacute;blicos necess&aacute;rios para a constru&ccedil;&atilde;o do seu projeto. &Eacute; poss&iacute;vel utilizar o navegador do reposit&oacute;rio Maven para visualizar o conte&uacute;do dos reposit&oacute;rios locais e remotos. Voc&ecirc; expande o n&oacute; Reposit&oacute;rio local para ver os artefatos que est&atilde;o presentes localmente. Os artefatos listados sob os n&oacute;s reposit&oacute;rio NetBeans podem ser adicionados como depend&ecirc;ncias de projeto, mas nem todos eles est&atilde;o presentes no local. Eles s&atilde;o adicionados ao reposit&oacute;rio local somente quando s&atilde;o declarados como depend&ecirc;ncias do projeto.</p>
<p>Para abrir o navegador do reposit&oacute;rio Maven:</p>
<ul>
<li>Escolha Janela &gt; Outro &gt; Navegador do reposit&oacute;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&oacute;rio Maven" title="Captura de tela do navegador do reposit&oacute;rio Maven" class="margin-around b-all" />
</li>
</ul>
</div>
<!-- =================================================================== -->
<!-- +++++++++++++++++++ Creating the Module Suite +++++++++++++++++++++ -->
<h2><a name="01"></a>Criando a su&iacute;te de m&oacute;dulos da plataforma NetBeans</h2>
<p>Nesta se&ccedil;&atilde;o, ser&aacute; utilizado o assistente Novo projeto para criar um aplicativo da su&iacute;te de m&oacute;dulos da plataforma NetBeans a partir de um arquetipo Maven. O assistente criar&aacute; um projeto POM que conter&aacute; os projetos do m&oacute;dulo. Nesse assistente, ser&aacute; criado um m&oacute;dulo como subprojeto da su&iacute;te.
</p>
<ol>
<li>Abra o assistente Novo projeto e escolha su&iacute;te de m&oacute;dulos do NetBeans Maven na categoria Maven. Clique em Pr&oacute;ximo.</li>
<li>Digite <strong>MavenSelectionSuite</strong> como o nome do projeto. Clique em Pr&oacute;ximo.</li>
<li>Selecione Criar projeto de m&oacute;dulo e digite <strong>MyAPI</strong> para o nome do m&oacute;dulo. Clique em Terminar.</li>
</ol>
<p>Ao clicar em Terminar, o IDE cria o projeto MavenSelectioneSuite e o subprojeto m&oacute;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 &eacute; um projeto POM que &eacute; um cont&ecirc;iner para subprojetos, nesse caso projetos de m&oacute;dulo NetBeans. O projeto POM n&atilde;o cont&eacute;m nenhum arquivo de c&oacute;digo-fonte. O projeto POM cont&eacute;m instru&ccedil;&otilde;es para compilar a su&iacute;te, e se observar o POM para o projeto &eacute; poss&iacute;vel visualizar que <tt>pom</tt> &eacute; espec&iacute;fico para o pacote.</p>
<pre class="examplecode"> &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
&lt;groupId&gt;com.mycompany&lt;/groupId&gt;
&lt;artifactId&gt;MavenSelectionSuite&lt;/artifactId&gt;
<strong>&lt;packaging&gt;pom&lt;/packaging&gt;</strong>
&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
&lt;name&gt;MavenSelectionSuite Netbeans Module Suite&lt;/name&gt;
...
&lt;properties&gt;
&lt;netbeans.version&gt;RELEASE69&lt;/netbeans.version&gt;
&lt;/properties&gt;
<strong>&lt;modules&gt;
&lt;module&gt;MyAPI&lt;/module&gt;
&lt;/modules&gt;</strong>
&lt;/project&gt;</pre>
<p>O POM tamb&eacute;m cont&eacute;m uma lista de m&oacute;dulos que ser&atilde;o inclu&iacute;dos ao construir o projeto POM. &Eacute; poss&iacute;vel visualizar que o projeto MyAPI est&aacute; listado como m&oacute;dulo.</p>
<p>Se expandir o n&oacute; m&oacute;dulo na janela Projetos, ser&aacute; poss&iacute;vel visualizar que o projeto MyAPI est&aacute; listado como um m&oacute;dulo. Na janela Arquivos, &eacute; poss&iacute;vel visualizar que o diret&oacute;rio do projetoMyAPI est&aacute; localizado no diret&oacute;rio <tt>MavenSelectionSuite</tt>. Ao criar um novo projeto no diret&oacute;rio de um projeto POM, o IDE adiciona automaticamente o projeto na lista de m&oacute;dulos no POM que est&atilde;o inclu&iacute;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&iacute;te de m&oacute;dulos da plataforma NetBeans do arquetipo Maven, n&atilde;o &eacute; necess&aacute;rio especificar o destino da instala&ccedil;&atilde;o da plataforma NetBeans no assistente Novo projeto, assim como ao utilizar o Ant. Para visualizar a instala&ccedil;&atilde;o da plataforma NetBeans &eacute; necess&aacute;rio modificar o elemento <tt>&lt;netbeans.installation&gt;</tt> no arquivo de projeto POM <tt>profiles.xml</tt> e especificar explicitamente o caminho para a instala&ccedil;&atilde;o da plataforma NetBeans. Para mais, consulte a se&ccedil;&atilde;o <a href="#05b">Especificando a localiza&ccedil;&atilde;o da instala&ccedil;&atilde;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&oacute;dulo MyAPI</h2>
<p>O m&oacute;dulo MyAPI foi criado ao criar a su&iacute;te de m&oacute;dulos, mas n&atilde;o &eacute; necess&aacute;rio criar uma classe no m&oacute;dulo e expor a classe para outros m&oacute;dulos.</p>
<div class="indent">
<a name="02a"></a>
<h3>Criando uma classe no m&oacute;dulo MyAPI</h3>
<p>Neste exerc&iacute;cio, ser&aacute; criada uma classe simples nomeada <tt>APIObject</tt>. Cada inst&acirc;ncia do <tt>APIObject</tt> ser&aacute; &uacute;nico, porque o campo <tt>&iacute;ndice</tt> foi incrementado por 1 cada vez que uma nova inst&acirc;ncia de <tt>APIObject</tt> &eacute; criada.</p>
<ol>
<li>Expanda o pacote MyAPI na janela Projetos.</li>
<li>Clique com o bot&atilde;o direito do mouse no n&oacute; Pacotes de fontes e escolha Novo &gt; 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&eacute;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 + &quot; - &quot; + date;
}
}</pre>
</li>
<li>Corrija as importa&ccedil;&otilde;es e salve as altera&ccedil;&otilde;es.</li>
</ol>
<a name="02b"></a>
<h3>Especificando os pacotes p&uacute;blicos</h3>
<p>Neste tutorial, ser&atilde;o criados m&oacute;dulos adicionais que necessitar&atilde;o acessar os m&eacute;todos no <tt>APIObject</tt>. Neste exerc&iacute;cio, os conte&uacute;dos do m&oacute;dulo p&uacute;blico MyAPI ser&atilde;o criados para que outros m&oacute;dulos possam acessar os m&eacute;todos. Para declarar o pacote <tt>com.mycompany.mavenselectionsuite</tt> como p&uacute;blico, &eacute; necess&aacute;rio modificar o elemento <tt>configura&ccedil;&atilde;o</tt> do <tt>nbm-maven-plugin</tt> no POM a fim de especificar os pacotes que s&atilde;o exportados como p&uacute;blicos. &Eacute; poss&iacute;vel efetuar as altera&ccedil;&otilde;es ao POM no editor ao selecionar os pacotes para tornar p&uacute;blico na janela Propriedades do projeto.</p>
<ol>
<li>Clique com o bot&atilde;o direito do mouse no n&oacute; 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&uacute;blicos</strong>. Clique em OK. <img src="../../images/tutorials/maven-suite/maven-suite-publicpackages.png" alt="Captura de tela de pacotes p&uacute;blicos na janela Propriedades" title="Pacotes p&uacute;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">&lt;plugin&gt;
&lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
&lt;artifactId&gt;nbm-maven-plugin&lt;/artifactId&gt;
&lt;extensions&gt;true&lt;/extensions&gt;
&lt;configuration&gt;
&lt;publicPackages&gt;
<strong>&lt;publicPackage&gt;com.mycompany.mavenselectionsuite&lt;/publicPackage&gt;</strong>
&lt;/publicPackages&gt;
&lt;/configuration&gt;
&lt;/plugin&gt;</pre></li>
<li>Clique com o bot&atilde;o direito do mouse no projeto e escolha Construir.</li>
</ol>
<p>Ao construir o projeto, o <tt>nbm-maven-plugin</tt> gerar&aacute; um cabe&ccedil;alho de manifesto no <tt>MANIFEST.MF</tt> do JAR, que especifica os pacotes p&uacute;blicos.</p>
<p class="tips">Para mais informa&ccedil;&otilde;es, consulte o <a href="http://mojo.codehaus.org/nbm-maven-plugin/manifest-mojo.html#publicPackages">manifesto de documenta&ccedil;&atilde;o nbm-maven-plugin</a>.</p>
</div>
<!-- =================================================================== -->
<!-- ++++++++++++++++++ Creating the MyViewer Module +++++++++++++++++++ -->
<h2><a name="03"></a>Criando o m&oacute;dulo MyViewer</h2>
<p>Nesta se&ccedil;&atilde;o, um novo m&oacute;dulo nomeado MyViewer ser&aacute; criado e um componente de janela ser&aacute; adicionado em dois campos de texto. O componente implementar&aacute; <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&ccedil;&otilde;es no<a href="http://wiki.netbeans.org/DevFaqLookup">Lookup</a>.</p>
<div class="indent">
<h3><a name="03a"></a>Criando o m&oacute;dulo</h3>
<p>Neste exerc&iacute;cio, ser&aacute; criado o m&oacute;dulo MyViewer no diret&oacute;rio <tt>MavenSelectionSuite</tt>.</p>
<ol>
<li>Escolha Arquivo &gt; Novo projeto do menu principal (Ctrl-Shift-N).</li>
<li>Selecione o m&oacute;dulo NetBeans Maven da categoria Maven. Clique em Pr&oacute;ximo.</li>
<li>Digite <strong>MyViewer</strong> como o nome do projeto.</li>
<li>Confirme se a localiza&ccedil;&atilde;o do projeto &eacute; o diret&oacute;rio <tt>MavenSelectionSuite</tt>. Clique em Terminar.</li>
<li>Clique com o bot&atilde;o direito do mouse no n&oacute; Bibliotecas na janela Projetos e escolha Adicionar depend&ecirc;ncia.</li>
<li>Selecione o m&oacute;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&uacute;blicos na janela Propriedades" title="Pacotes p&uacute;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&ecirc;ncias no POM e exibe o artefato abaixo do n&oacute; Bibliotecas.</p>
<p>Ao observar o POM do m&oacute;dulo MyViewer, &eacute; poss&iacute;vel perceber que o projeto principal para o m&oacute;dulo &eacute; MavenSelectionSuite, que <tt>nbm</tt> e especificado para <tt>empacotamento</tt> e que o <strong>nbm-maven-plugin</strong> ser&aacute; utilizado para construir o projeto como m&oacute;dulo NetBeans.</p>
<pre class="examplecode">
&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
<strong>&lt;parent&gt;
&lt;groupId&gt;com.mycompany&lt;/groupId&gt;
&lt;artifactId&gt;MavenSelectionSuite&lt;/artifactId&gt;
&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
&lt;/parent&gt;</strong>
&lt;groupId&gt;com.mycompany&lt;/groupId&gt;
&lt;artifactId&gt;MyViewer&lt;/artifactId&gt;
<strong>&lt;packaging&gt;nbm&lt;/packaging&gt;</strong>
&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
&lt;name&gt;MyViewer NetBeans Module&lt;/name&gt;
</pre>
<a name="03b"></a>
<h3>Criando o componente de janela</h3>
<p>Neste exerc&iacute;cio, um componente de janela ser&aacute; criado e dois campos de texto adicionados.</p>
<ol>
<li>Clique com o bot&atilde;o direito do mouse no projeto MyViewer e escolha Nova &gt; Janela.</li>
<li>Selecione <strong>navegador</strong> da lista suspensa e selecione Abrir em Iniciar aplicativo. Clique em Pr&oacute;ximo.</li>
<li>Digite <strong>MyViewer</strong> como prefixo do nome da classe. Clique em Terminar.</li>
<li>Arraste dois r&oacute;tulos da Paleta para o componente e altere o texto do topo do r&oacute;tulo para <tt>&quot;[nothing selected]&quot;</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&oacute;digo-fonte e modifique a assinatura de classe para implementar <tt>LookupListener</tt>.
<pre class="examplecode">classe p&uacute;blica MyViewerTopComponent estende TopComponent <strong>implemente LookupListener</strong> {</pre></li>
<li>Implemente os m&eacute;todos abstratos ao colocar o cursor de inser&ccedil;&atilde;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&ccedil;as a seguir para os m&eacute;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(&quot;[no selection]&quot;);
jLabel2.setText (&quot;&quot;);
}</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 &eacute; aberto a classe &eacute; capaz de alertar globalmente para o objeto de Pesquisa do componente que tem o foco. A Pesquisa &eacute; removida quando o componente &eacute; finalizado. O m&eacute;todo <tt>resultChanged()</tt> implementa o <tt>LookupListener</tt> de forma que o JLabels do formul&aacute;rio seja atualizado de acordo com o <tt>APIObject</tt> que possui o foco.</p>
</li>
<li>Corrija as importa&ccedil;&otilde;es e assegure-se de adicionar <strong><tt>org.openide.util.Utilities</tt></strong>. Salve as altera&ccedil;&otilde;es.</li>
</ol>
</div>
<!-- =================================================================== -->
<!-- ++++++++++++++++++ Creating the MyEditor Module +++++++++++++++++++ -->
<h2><a name="04"></a>Criando o m&oacute;dulo MyEditor</h2>
<p>Nesta se&ccedil;&atilde;o, um novo m&oacute;dulo chamado MyEditor ser&aacute; criado. O m&oacute;dulo conter&aacute; um <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-windows/org/openide/windows/TopComponent.html">TopComponent</a></tt> que oferecer&aacute; inst&acirc;ncias de <tt>APIObject</tt> atrav&eacute;s da Pesquisa. Tamb&eacute;m ser&aacute; criada uma a&ccedil;&atilde;o que abrir&aacute; novas inst&acirc;ncias do componente MyEditor.</p>
<div class="indent">
<a name="04a"></a>
<h3>Criando o m&oacute;dulo</h3>
<p>Neste exerc&iacute;cio, um m&oacute;dulo NetBeans ser&aacute; criado no diret&oacute;rio <tt>MavenSelectionSuite</tt> e uma depend&ecirc;ncia ser&aacute; adicionada no m&oacute;dulo API.</p>
<ol>
<li>Escolha Arquivo &gt; Novo projeto no menu principal.</li>
<li>Selecione o m&oacute;dulo NetBeans Maven da categoria Maven. Clique em Pr&oacute;ximo.</li>
<li>Digite <strong>MyEditor</strong> como nome do projeto.</li>
<li>Confirme se a localiza&ccedil;&atilde;o do projeto &eacute; o diret&oacute;rio <tt>MavenSelectionSuite</tt>. Clique em Terminar.</li>
<li>Clique com o bot&atilde;o direito do mouse no n&oacute; Bibliotecas na janela Projetos e escolha Adicionar depend&ecirc;ncia.</li>
<li>Selecione o m&oacute;dulo NetBeans MyAPI na aba Abrir projetos. Clique em OK.</li>
</ol>
<a name="04b"></a>
<h3>Adicionando uma a&ccedil;&atilde;o</h3>
<p>Neste exerc&iacute;cio, ser&aacute; criada uma classe para adicionar um item de menu ao menu Arquivo para abrir um componente nomeado MyEditor. O componente ser&aacute; criado no pr&oacute;ximo exerc&iacute;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&atilde;o direito do mouse no projeto MyEditor e escolha Novo &gt; A&ccedil;&atilde;o para abrir a caixa de di&aacute;logo Nova a&ccedil;&atilde;o.</li>
<li>Selecione sempre habilitado. Clique em Pr&oacute;ximo.</li>
<li>Mantenha os padr&otilde;es na p&aacute;gina Registro de GUI. Clique em Pr&oacute;ximo.</li>
<li>Digite <strong>OpenEditorAction</strong> para o nome da classe.</li>
<li>Digite <strong>Open Editor</strong> para o nome de exibi&ccedil;&atilde;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">
&lt;filesystem&gt;
&lt;folder name=&quot;Actions&quot;&gt;
&lt;folder name=&quot;Build&quot;&gt;
&lt;file name=&quot;com-mycompany-myeditor-OpenEditorAction.instance&quot;&gt;
&lt;attr name=&quot;delegate&quot; newvalue=&quot;com.mycompany.myeditor.OpenEditorAction&quot;/&gt;
&lt;attr name=&quot;displayName&quot; bundlevalue=&quot;com.mycompany.myeditor.Bundle#CTL_OpenEditorAction&quot;/&gt;
&lt;attr name=&quot;instanceCreate&quot; methodvalue=&quot;org.openide.awt.Actions.alwaysEnabled&quot;/&gt;
&lt;attr name=&quot;noIconInMenu&quot; boolvalue=&quot;false&quot;/&gt;
&lt;/file&gt;
&lt;/folder&gt;
&lt;/folder&gt;
&lt;folder name=&quot;Menu&quot;&gt;
&lt;folder name=&quot;File&quot;&gt;
&lt;file name=&quot;com-mycompany-myeditor-OpenEditorAction.shadow&quot;&gt;
&lt;attr name=&quot;originalFile&quot; stringvalue=&quot;Actions/Build/com-mycompany-myeditor-OpenEditorAction.instance&quot;/&gt;
&lt;attr name=&quot;position&quot; intvalue=&quot;0&quot;/&gt;
&lt;/file&gt;
&lt;/folder&gt;
&lt;/folder&gt;
&lt;/filesystem&gt;</pre></li>
<li>Modifique a classe <tt>OpenEditorAction</tt> para modificar o m&eacute;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&iacute;cio, ser&aacute; criado um componente MyEditor que abre na &aacute;rea do editor quando invocado pelo <tt>OpenEditorAction</tt>. Um modelo de componente de janela n&atilde;o ser&aacute; utilizado porque voc&ecirc; desejar&aacute; v&aacute;rias inst&acirc;ncias do componente e o componente da janela &eacute; utilizado para criar componentes singleton. Em vez disso, ser&aacute; utilizado um modelo de forma JPanel e, em seguida, a classe ser&aacute; modificada para estender <tt>TopComponent</tt>.</p>
<ol>
<li>Clique com o bot&atilde;o direito do mouse em Pacotes de c&oacute;digo-fonte e escolha Novo &gt; Outro e selecione Formul&aacute;rio JPanel na categoria Formul&aacute;rios Swing de GUI. Clique em Pr&oacute;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&aacute;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&aacute;vel para r&oacute;tulos" title="Propriedade Edit&aacute;vel para r&oacute;tulos" class="margin-around b-all" />
</li>
<li>Clique na aba C&oacute;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&uacute;blica MyEditor estende <strong>TopComponent</strong></pre></li>
<li>Coloque o cursor de inser&ccedil;&atilde;o na assinatura e pressione Alt-Enter para consertar o erro no c&oacute;digo, localizando o reposit&oacute;rio Maven e adicionando uma depend&ecirc;ncia no artefato <tt>org.openide.windows</tt>. Corrija suas importa&ccedil;&otilde;es.<br/>
<img src="../../images/tutorials/maven-suite/maven-suite-add-topcomponent.png" alt="Captura de tela da propriedade Edit&aacute;vel para r&oacute;tulos" title="Propriedade Edit&aacute;vel para r&oacute;tulos" class="margin-around b-all" />
</li>
<li>Modifique o construtor para criar uma nova inst&acirc;ncia de <tt>APIObject</tt> toda vez que a classe &eacute; invocada.
<pre class="examplecode">
public MyEditor() {
initComponents();
<strong>APIObject obj = new APIObject();
associateLookup(Lookups.singleton(obj));
jTextField1.setText(&quot;APIObject #&quot; + obj.getIndex());
jTextField2.setText(&quot;Created: &quot; + obj.getDate());
setDisplayName(&quot;MyEditor &quot; + obj.getIndex());</strong>
}</pre>
<p>A linha <tt>associateLookup(Lookups.singleton(obj));</tt> no construtor criar&aacute; uma Pesquisa que cont&eacute;m a nova inst&acirc;ncia de <tt>APIObject</tt>.</p></li>
<li>Corrija suas importa&ccedil;&otilde;es e salve as altera&ccedil;&otilde;es.</li>
</ol>
<p>Os campos de texto no componente exibem somente o valor do &iacute;ndice e a data do <tt>APIObject</tt>. Isso possibilitar&aacute; que voc&ecirc; perceba que cada componente MyEditor &eacute; &uacute;nico e que o MyViewer est&aacute; exibindo os detalhes do componente MyEditor que possui o foco.</p>
<p class="notes"><strong>Nota.</strong> Os erros no <tt>OpenEditorAction</tt> ser&atilde;o resolvidos ap&oacute;s salvar as altera&ccedil;&otilde;es no <tt>MyEditor</tt>. </p>
</div>
<!-- =================================================================== -->
<!-- ++++++++++++++++ Building and Running the Module +++++++++++++++++ -->
<h2><a name="05"></a>Construindo e executando a su&iacute;te de m&oacute;dulos</h2>
<p>Nesse momento, voc&ecirc; est&aacute; quase pronto para executar a su&iacute;te para verificar se ela constroi, instala e se comporta corretamente.</p>
<div class="indent">
<a name="05a"></a>
<h3>Declarando depend&ecirc;ncias diretas</h3>
<p>Antes de poder construir e executar a su&iacute;te necess&aacute;ria para modificar uma das depend&ecirc;ncias do projeto MyEditor. Se tentar construir a su&iacute;te de m&oacute;dulos agora, a sa&iacute;da de constru&ccedil;&atilde;o na janela Sa&iacute;da informar&aacute; que a su&iacute;te n&atilde;o pode compilar porque o m&oacute;dulo MyEditor requer que o artefato <tt>org.openide.util-lookup</tt> esteja dispon&iacute;vel no tempo de execu&ccedil;&atilde;o.</p>
<p>Se clicar com o bot&atilde;o direito do mouse no n&oacute; do projeto e escolher Mostrar gr&aacute;fico de depend&ecirc;ncia, o visualizador gr&aacute;fico da depend&ecirc;ncia poder&aacute; lhe ajudar a visualizar as depend&ecirc;ncias de m&oacute;dulo.</p>
<img src="../../images/tutorials/maven-suite/maven-suite-dependency-graph.png" alt="Captura de tela do gr&aacute;fico de depend&ecirc;ncia do artefato" title="gr&aacute;fico de depend&ecirc;ncia do artefato" class="margin-around b-all" />
<p>&Eacute; poss&iacute;vel visualizar que o MyEditor n&atilde;o tem uma depend&ecirc;ncia direta no <tt>org.openide.util-lookup</tt>. A depend&ecirc;ncia &eacute; transitiva e o artefato est&aacute; dispon&iacute;vel para o projeto no momento da compila&ccedil;&atilde;o, mas as depend&ecirc;ncias necessitam ser diretas se o artefato estiver dispon&iacute;vel no tempo de execu&ccedil;&atilde;o. &Eacute; necess&aacute;rio modificar o POM para declarar o artefato como depend&ecirc;ncia direta.</p>
<p>&Eacute; poss&iacute;vel transformar o artefato em uma depend&ecirc;ncia direta editando manualmente o POM ou utilizando o item de menu pop-up na janela Projetos.</p>
<ol>
<li>Expanda o n&oacute; Bibliotecas do m&oacute;dulo MyEditor.</li>
<li>Clique com o bot&atilde;o direito do mouse no artefato <tt>org.openide.util-lookup</tt> e escolha Declarar como depend&ecirc;ncia direta.
<p>Ao escolher Declarar como depend&ecirc;ncia direta, o IDE modifica o POM para adicionar o artefato como uma depend&ecirc;ncia.</p>
</li>
</ol>
<p class="notes"><strong>Nota.</strong> O artefato <tt>org.openide.util-lookup</tt> j&aacute; &eacute; uma depend&ecirc;ncia direta do m&oacute;dulo MyViewer.</p>
<a name="05b"></a>
<h3>Especificando a localiza&ccedil;&atilde;o da instala&ccedil;&atilde;o do NetBeans</h3>
<p>Como padr&atilde;o, nenhum destino de instala&ccedil;&atilde;o do NetBeans &eacute; especificado quando o arquetipo Maven &eacute; utilizado para criar uma plataforma de su&iacute;te de m&oacute;dulos NetBeans. Para instalar e executar a su&iacute;te de m&oacute;dulo em uma instala&ccedil;&atilde;o do IDE, &eacute; necess&aacute;rio especificar o caminho para a instala&ccedil;&atilde;o do diret&oacute;rio, editando o arquivo <tt>profiles.xml</tt> no projeto POM.</p>
<ol>
<li>Expanda o n&oacute; 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>&lt;netbeans.installation&gt;</tt> para especificar o caminho para a plataforma NetBeans de destino e salve as altera&ccedil;&otilde;es.
<pre class="examplecode">
&lt;profile&gt;
&lt;id&gt;netbeans-ide&lt;/id&gt;
&lt;properties&gt;
&lt;netbeans.installation&gt;/home/me/netbeans-6.9&lt;/netbeans.installation&gt;
&lt;/properties&gt;
&lt;/profile&gt;</pre>
<p class="notes"><strong>Nota.</strong> O caminho necessita especificar o diret&oacute;rio que cont&eacute;m o diret&oacute;rio <tt>bin</tt> contendo o arquivo execut&aacute;vel.</p>
<p>Por exemplo, no sistema operacional X, o caminho pode se assemelhar ao seguinte.</p>
<pre class="examplecode">&lt;netbeans.installation&gt;/Applications/NetBeans/NetBeans6.9.app/Contents/Resources/NetBeans&lt;/netbeans.installation&gt;</pre>
</li>
</ol>
<a name="05c"></a>
<h3>Executando o aplicativo</h3>
<p>Agora que o destino da instala&ccedil;&atilde;o do IDE foi especificado, &eacute; poss&iacute;vel utilizar o comando Executar no projeto su&iacute;te.</p>
<ol>
<li>Clique com o bot&atilde;o direito do mouse em MavenSelectionSuite e escolha Executar.</li>
</ol>
<p>Ao escolher Executar, uma inst&acirc;ncia do IDE ser&aacute; iniciada com a su&iacute;te de m&oacute;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&aacute; quando o aplicativo for iniciado e exibir&aacute; os dois r&oacute;tulos de texto. Para abrir um componente MyEditor na &aacute;rea do editor, &eacute; poss&iacute;vel escolher Abrir editor no menu Arquivo. A janela MyViewer exibir&aacute; os detalhes do componente MyEditor que possui o foco.</p>
<p>A a&ccedil;&atilde;o Executar para o projeto su&iacute;te de m&oacute;dulos &eacute; configurado, como padr&atilde;o, para utilizar o plug-in Reator, a fim de construir recursivamente e empacotar os m&oacute;dulos que est&atilde;o especificados como parte da su&iacute;te. &Eacute; poss&iacute;vel abrir a janela Propriedades do projeto para visualizar as metas do Maven, que s&atilde;o mapeadas para a&ccedil;&otilde;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&ccedil;&otilde;es, na janela Propriedades, &eacute; poss&iacute;vel visualizar as metas que s&atilde;o mapeadas para a a&ccedil;&atilde;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> &eacute; criado toda vez que um novo componente MyEditor &eacute; aberto. Nesta se&ccedil;&atilde;o, um bot&atilde;o ser&aacute; adicionado ao componente MyEditor, que substituir&aacute; o atual <tt>APIObject</tt> do componente com um novo. Ser&aacute; modificado o c&oacute;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&ccedil;&otilde;es ao conte&uacute;do de Pesquisa.</p>
<ol>
<li>Expanda o projeto MyEditor e abra o formul&aacute;rio <tt>MyEditor</tt> na visualiza&ccedil;&atilde;o Desenho do editor.</li>
<li>Arraste um bot&atilde;o para o formul&aacute;rio e defina o texto do bot&atilde;o como &quot;Substituir&quot;.</li>
<li>Clique com o bot&atilde;o direito do mouse e escolha Eventos &gt; A&ccedil;&otilde;es &gt; actionPerformed para criar um m&eacute;todo do manipulador de eventos para o bot&atilde;o e abrir o formul&aacute;rio no editor de c&oacute;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&iacute;cios do <tt>InstanceContent</tt> ser&aacute; necess&aacute;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&eacute;todo do manipulador de eventos <tt>jButton1ActionPerformed</tt> para ter a seguinte apar&ecirc;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 (&quot;APIObject #&quot; + obj.getIndex());
jTextField2.setText (&quot;Created: &quot; + obj.getDate());
setDisplayName (&quot;MyEditor &quot; + 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&ecirc;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&aacute; inicializado quando criado.</p></li>
<li>Corrija as importa&ccedil;&otilde;es e salve as altera&ccedil;&otilde;es.</li>
</ol>
<p>Ao executar o projeto da su&iacute;te de m&oacute;dulos novamente, ser&aacute; poss&iacute;vel visualizar o novo bot&atilde;o em cada componente MyEditor. Ao clicar no bot&atilde;o, o n&uacute;mero do &iacute;ndice no texto ser&aacute; aumentado. O r&oacute;tulo na janela MyViewer tamb&eacute;m ser&aacute; atualizada para corresponder ao novo valor.</p>
<p>Este tutorial demonstrou como criar e executar uma su&iacute;te de m&oacute;dulos da plataforma NetBeans, que voc&ecirc; criou a partir de um arquetipo Maven. Voc&ecirc; viu como a su&iacute;te de m&oacute;dulos s&atilde;o estruturadas e como configurar um m&oacute;dulo POM para especificar os pacotes p&uacute;blicos. Tamb&eacute;m aprendeu como modificar o projeto POM principal para especificar o destino da instala&ccedil;&atilde;o do NetBeans, para que o comando Executar no IDE instale a su&iacute;te e inicie uma nova inst&acirc;ncia da Plataforma. Para mais exemplos sobre como construir aplicativos e m&oacute;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&eacute;m</h2>
<p>Para mais informa&ccedil;&otilde;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&ecirc; tiver qualquer d&uacute;vida sobre a Plataforma NetBeans, sinta-se a vontade para escrever para a lista de correspond&ecirc;ncia, dev@platform.netbeans.org, ou consulte o <a href="https://netbeans.org/projects/platform/lists/dev/archive">arquivo de lista de correspond&ecirc;ncia NetBeans</a>.</p>
<!-- ======================================================================================== -->
</body>
</html>