// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Encapsulamento Nativo no NetBeans IDE
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Encapsulamento Nativo no NetBeans IDE - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Encapsulamento Nativo no NetBeans IDE

Escrito por Petr Somol e Alyona Stashkova

O encapsulamento nativo foi apresentado pela primeira vez como parte do JavaFX 2.2 SDK, permitindo que você encapsule uma aplicação como um _encapsulamento nativo_ e, em seguida, instale e execute a aplicação sem nenhuma dependência em um sistema JRE ou JavaFX SDK. Em seguida, ele se tornará utilizável também para projetos Java SE.

O encapsulamento nativo não altera o modelo de implantação de sua aplicação: ele usa a aplicação como está, encapsula com runtime de Java e produz um instalador que é comum para o sistema operacional que você está usando. O ponto principal é criar uma única ação não importando o runtime de Java que os usuários têm na máquina-alvo. Você pode usar um instalador e executá-lo em uma máquina na qual não há rastreamento de Java. Isso instalará a aplicação e os bits de runtime Java necessários. O tamanho desses instaladores é bem grande porque mesmo uma aplicação "Hello world" transportará uma parte grande de artefatos de runtime Java.

Neste tutorial, você criará um instalador  ``EXE``  de uma aplicação Java SE e um instalador  ``MSI``  para uma aplicação JavaFX para o sistema operacional Windows, com base nas aplicações de amostra encapsuladas com o IDE.

*Observação:*

* Os instaladores  ``EXE``  e  ``MSI``  que você obtém são específicos da plataforma; eles só serão executados em um sistema compatível com a plataforma Java de destino cujos pacotes  ``EXE`` / ``MSI``  instaláveis foram criados. (Por exemplo, se um instalador  ``EXE``  ou  ``MSI``  foi criado em uma máquina com um JDK de 64 bits instalado, ele deverá ser executado em uma máquina com Windows de 64 bits instalado).
* No Windows, ambas as aplicações são instaladas no diretório  ``C:\Users\<username>\AppData\Local\``  e estão disponíveis no menu Iniciar.


image::images/netbeans-stamp-80-74.png[title="O conteúdo desta página se aplica ao NetBeans IDE 7.4 ou 8.0"]


*Para seguir este tutorial, são necessários os recursos e o software a seguir.*

|===
|Software ou Recurso |Versão Necessária 

|link:http://netbeans.org/downloads/index.html[+NetBeans IDE+] |7.4 ou 8.0 

|link:http://www.oracle.com/technetwork/java/javafx/downloads/index.html[+JDK (Java Development Kit)+] |7 atualização 25 (ou mais recente) ou 8 

|link:http://www.jrsoftware.org/[+Inno Setup+] |5.5 ou versão mais recente 

|link:http://wixtoolset.org/[+WiX+] |3.7 ou versão mais recente 
|===


== Instalando e Adicionando as Ferramentas Necessárias ao Caminho

Para usar o suporte do IDE para encapsulamento nativo, as seguintes ferramentas adicionais precisam ser instaladas:

* O link:http://www.jrsoftware.org/[+Inno Setup 5.5+] (ou uma versão mais recente) para produzir instaladores EXE no Windows é obrigatório.
* O link:http://wixtoolset.org/[+WiX 3.7+] (ou uma versão mais recente) para produzir instaladores MSI no Windows é obrigatório.

*Observação:* para obter uma lista de ferramentas obrigatórias para criar instaladores para diferentes plataformas, consulte "link:http://www.oracle.com/pls/topic/lookup?ctx=nb7400&id=NBDAG2508[+Encapsulando uma Aplicação como um Instalador Nativo+]" em _Desenvolvendo Aplicações com o NetBeans IDE_.

*Para instalar o Inno Setup:*

1. Faça Download do  ``ispack-5.5.3.exe``  na página link:http://www.jrsoftware.org/isdl.php[+Downloads do Inno Setup+]
2. Clique duas vezes no arquivo para iniciar o instalador.
3. Aceite o contrato de licença do Inno Setup e clique em Próximo.
4. Siga as instruções do assistente de instalação para instalar o Inno Setup.

*Para instalar o WiX:*

1. Faça download do  ``wix37.exe``  na página link:http://wix.codeplex.com/releases/view/99514[+WiX Toolset - Download+].
2. Clique duas vezes no arquivo para iniciar o instalador.
3. Siga as instruções do assistente de instalação para instalar o WiX.

*Para adicionar o Inno Setup e/ou WiX à variável Path do sistema:*

1. No Windows 7, selecione Iniciar > Computador > Propriedades do Sistema > Configurações avançadas do sistema.
2. Selecione a guia Avançado e clique no botão Variáveis de Ambiente.
3. No painel Variáveis do Sistema, clique duas vezes na variável Path.
4. Na caixa de diálogo Editar Variável do Sistema, adicione um ponto-e-vírgula seguido de um novo caminho ao campo Valor da variável (por exemplo,  ``C:\Arquivos de Programa (x86)\Inno Setup 5 ``  ou  ``C:\Arquivos de Programa (x86)\WiX Toolset v3.6\bin`` ).
5. Clique em OK para fechar todas as caixas de diálogo abertas.

*Observações:*

* Para verificar se a ferramenta instalada está no Path, abra a janela Prompt de Comando e digite  ``iscc.exe``  para Inno Setup ou  ``candle.exe``  para WiX. (Se o Prompt de Comando for fechado instantaneamente, tente especificar  ``cmd.exe /c cmd.exe /k iscc.exe``  ou  ``cmd.exe /c cmd.exe /k candle.exe``  respectivamente.)
A figura a seguir mostra o que o Prompt de Comando deve exibir, caso o Inno Setup seja adicionado à variável Path do sistema.

[.feature]
--
image::images/cmd_small.png[role="left", link="images/cmd.png"]
--

* Certifique-se de que o IDE tenha sido reiniciado após as ferramentas serem adicionadas à variável Path do sistema.


== Encapsulamento Nativo nos Projetos Java SE

Para utilizar o suporte de encapsulamento nativo no IDE, é necessário concluir o seguinte:

* <<createse,criar um projeto IDE>>
* <<enable,ativar as ações de encapsulamento nativo no projeto>>
* <<buildse,limpar e construir o projeto>>
* <<instse,encapsular uma aplicação em um instalador>>


=== Configurando um Projeto Java SE

Antes de encapsular uma aplicação em um instalador, é necessário criar uma aplicação.

Você criará um novo projeto Java SE com o exemplo do jogo de Anagramas que é enviado com o NetBeans IDE.

*Para criar um projeto do IDE:*

1. No IDE, escolha Arquivo > Novo Projeto.
2. No assistente Novo Projeto, expanda a categoria Amostras e selecione Java.
3. Escolha o Jogo de Anagramas na lista Projetos. Em seguida, clique em Próximo.

[.feature]
--
image::images/new_javase_prj_small.png[role="left", link="images/new_javase_prj.png"]
--



. No painel Nome e Local, deixe os valores default para os campos Nome do Projeto e Localização do Projeto.


. Clique em Finalizar.
O IDE cria e abre o projeto Java SE.

Para testar se o projeto criado funciona, execute-o escolhendo Executar > Executar Projeto no menu principal.
A aplicação Anagramas deve ser iniciada e exibida em sua máquina.

image::images/anagrams.png[]


=== Ativando Encapsulamento Nativo no IDE

As ações do encapsulamento nativo são desativadas no IDE, por default.

Clique com o botão direito do mouse no projeto AnagramGame na janela Projetos, para verificar as ações disponíveis para o projeto Java SE criado no IDE: não há ações relacionadas ao pacote no menu de contexto do projeto.

image::images/context_wo_pkg.png[]

*Para ativar as ações de encapsulamento nativo do projeto:*

1. Clique com o botão direito do mouse no nó do projeto na janela Projetos e selecione as Propriedades no menu de contexto.
2. Na caixa de diálogo Propriedades do Projeto, escolha a categoria Implantação e selecione Ativar Ações de Encapsulamento Nativo na opção Menu do Projeto.

[.feature]
--
image::images/enable_native_pkg_small.png[role="left", link="images/enable_native_pkg.png"]
--



. Clique em OK. 
Um comando Encapsular como é adicionado ao menu de contexto do projeto.

image::images/pkg_enabled.png[]


=== Construindo uma Aplicação

É hora de limpar e construir sua aplicação para implantação.

*Para limpar e construir seu projeto:*

* Escolha Executar > Limpar e Construir Projeto do menu principal.
O IDE exibe os resultados na janela de Saída.

[.feature]
--
image::images/output_small.png[role="left", link="images/output.png"]
--

Uma pasta  ``dist``  que contém um arquivo  ``jar``  é criada na pasta do projeto.


=== Criando um Instalador  ``EXE`` 

A aplicação agora pode ser encapsulada em um instalador para Windows.

*Para construir um instalador  ``EXE`` :*

* Clique com o botão direito do mouse no projeto AnagramGame e escolha Encapsular como > Instalador EXE do menu de contexto.

*Observação:* o IDE só criará um instalador  ``EXE``  se o Inno Setup for <<tool,instalado e adicionado à variável Path do sistema>>.

O IDE exibe o andamento e o resultado do processo de encapsulamento na janela de Saída.

[.feature]
--
image::images/output_se_exe_small.png[role="left", link="images/output_se_exe.png"]
--

*Observação:* o IDE primeiro registra o progresso e, em seguida, durante um período verifica como se nada estivesse acontecendo - é exatamente neste momento em que o Inno Setup está trabalhando em segundo plano. Demora um pouco para o encapsulamento ser concluído.

Quando o instalador  ``EXE``  estiver pronto, ele será colocado no diretório  ``AnagramGame/dist/bundles/`` .

image::images/anagram_exe.png[]


== Encapsulamento de Aplicação Autocontida nos Projetos JavaFX

Para criar uma aplicação JavaFX instalável usando o suporte ao encapsulamento nativo no IDE, é necessário concluir o seguinte:

* <<createfx,criar um projeto JavaFX no IDE>>
* <<enablefx,ativar o suporte ao encapsulamento nativo para o projeto>>
* <<buildfx,limpar e construir uma aplicação JavaFX>>
* <<instfx,construir uma aplicação JavaFX instalável>>


=== Criando um Projeto JavaFX

Você começa a criação de um projeto JavaFX usando o projeto de amostra BrickBreaker encapsulado com o IDE.

*Para criar um projeto JavaFX no IDE:*

1. No IDE, escolha Arquivo > Novo Projeto.
2. No assistente Novo Projeto, expanda a categoria Amostras e selecione JavaFX.
3. Escolha BrickBreaker na lista Projetos. Em seguida, clique em Próximo.
4. No painel Nome e Local, deixe os valores default para os campos Nome do Projeto, Localização do Projeto e Plataforma JavaFX.

[.feature]
--
image::images/new_javafx_prj_small.png[role="left", link="images/new_javafx_prj.png"]
--



. Clique em Finalizar. 
O projeto JavaFX do BrickBreaker é exibido na janela Projetos no IDE.

Para testar se o projeto criado funciona, execute-o escolhendo Executar > Executar Projeto (BrickBreaker) no menu principal.
A aplicação Brick Breaker deve ser iniciada e exibida em sua máquina.

[.feature]
--
image::images/brickbreaker_small.png[role="left", link="images/brickbreaker.png"]
--


=== Ativando Encapsulamento Nativo no Projeto

Para usar o suporte ao encapsulamento nativo no IDE para seu projeto, é necessário ativá-lo primeiro.

Se clicar com o botão direito no mouse no projeto Brick Breaker, você não verá nele ações relacionadas a encapsulamento nativo.

image::images/javafx_wo_pkg.png[]

*Para ativar as ações de encapsulamento nativo no menu de contexto do projeto:*

1. Clique com o botão direito do mouse no nó do projeto na janela Projetos e selecione as Propriedades no menu de contexto.
2. Na caixa de diálogo Propriedades do Projeto, escolha a categoria Construir e selecione a opção Ativar Encapsulamento Nativo.

[.feature]
--
image::images/enable_native_pkg_fx_small.png[role="left", link="images/enable_native_pkg_fx.png"]
--



. Clique em OK. 
A opção Encapsular como item é adicionada ao menu de contexto do projeto.

image::images/pkg_fx_enabled.png[]


=== Construindo uma Aplicação

Sua aplicação JavaFX agora está pronta para ser limpa e construída.

*Para limpar e construir seu projeto:*

* Escolha Executar > Limpar e Construir Projeto do menu principal.
O IDE exibe os resultados na janela de Saída.

*Observação:* se a construção for bem-sucedida, mas o IDE exibir  ``advertência: [opções] caminho de classe de bootstrap não definido com -código-fonte 1.6``  na janela de Saída, o formato de Código-fonte/Binário precisará ser definido como JDK 8 nas propriedades do projeto e o projeto precisa ser limpo e construído novamente, como segue:

1. Clique com o botão direito do mouse no projeto BrickBreaker na janela Projetos e escolha Propriedades.
2. Na caixa de diálogo Propriedades do projeto, selecione a categoria Executar Códigos-fontes.
3. Defina o formato Código-fonte/Binário para JDK 8 e clique em OK.
4. Clique com o botão direito do mose na janela Projetos e escolha Limpar e Construir no menu de contexto.


=== Criando um Instalador  ``MSI`` 

A aplicação agora pode ser encapsulada em um pacote instalável específico do Windows.

*Para construir um instalador  ``MSI`` :*

* Clique com o botão direito do mouse no projeto BrickBreaker e escolha Encapsular como > Instalador MSI do menu de contexto.

*Observação:* o IDE cria um instalador  ``MSI``  somente se WiX for <<tool,instalada e adicionada à variável Path do sistema>>.

O IDE exibe o andamento e o resultado do processo de encapsulamento na janela de Saída.

[.feature]
--
image::images/output_fx_msi_small.png[role="left", link="images/output_fx_msi.png"]
--

*Observação:* o IDE primeiro registra o progresso e, em seguida, durante um período verifica como se nada estivesse acontecendo - é exatamente neste momento em que a WiX está trabalhando em segundo plano. Demora um pouco para o encapsulamento ser concluído.

A aplicação JavaFX instalável está localizada no diretório  ``BrickBreaker/dist/bundles/`` .

image::images/brickbreaker_msi.png[]


== [[Verificando as Aplicações Instaláveis]] 

Quando os instaladores de  ``AnagramGame-1.0.exe``  e  ``BrickBreaker-1.0.msi``  forem concluídos, você precisará em qual diretório as aplicações Anagram e BrickBreaker foram instaladas.

*Para verificar os instaladores:*

1. Procure o arquivo do instalador ( ``AnagramGame-1.0.exe``  ou  ``BrickBreaker-1.0.msi`` ) em seu disco rígido.
2. Clique duas vezes para executar o instalador.

As duas aplicações devem ser instaladas no diretório  ``C:\Users\<username>\AppData\Local\``  e devem estar disponíveis no menu Iniciar.


== Consulte Também

* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG2508[+Encapsulando uma Aplicação como um Instalador Nativo+] em _Desenvolvendo Aplicações com o NetBeans IDE_
* link:http://docs.oracle.com/javafx/2/deployment/self-contained-packaging.htm[+Implantando Aplicações JavaFX: Encapsulamento da Aplicação Autocontida+]
* link:http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html[+Encapsulando uma Aplicação Java para Distribuição em uma Máquina+]
link:/about/contact_form.html?to=3&subject=Feedback:%20Native%20Packaging%20In%20NetBeans%20IDE[+Enviar Feedback neste Tutorial+]


link:../../trails/matisse.html[+Voltar à Trilha do Aprendizado+]

