Login Registre-se

Home > Artigos > Frameworks, APIs, Instalação e Configuração >

Criando Instaladores com IzPack

Publicado por Tutoriais Admin em 17/08/2009 - 22.788 visualizações


comentários: 0

Sempre que baixamos algum programa da internet, esses, normalmente, vêm com instaladores e desinstaladores. O que, por mais amador que o produto possa ser, lhe confere um aspecto muito mais profissional e dá até mais credibilidade.

Fazer instaladores em Java não era uma coisa simples. Eu disse não ERA, no passado. Agora, nós pobres mortais que não temos dinheiro para comprar licenças do InstallShield ou InstallAnywhere, podemos criar nossos próprios instaladores de forma bastante profissional.

Solução: IzPack

O IzPack é um gerador de instalações para a plataforma Java, open-source, que facilita incrivelmente a criação de instaladores bastante completos e profissionais.

A intenção deste artigo é introduzir a idéia e arquitetura do IzPack. Para isso, abordaremos download, instalação, configuração e integração com o Ant.

Download e Instalação

A nossa primeira tarefa é baixar o IzPack e instalá-lo. Sendo assim, mãos a obra.

O IzPack pode ser baixado no site do projeto http://www.izforge.com/izpack/ . Para instalá-lo, é mais fácil ainda, basta rodar o instalador, que vem em um único arquivo jar.

Arquitetura e Funcionamento

O IzPack é uma espécie de compilador para criar instaladores, onde os códigos fonte são escritos em XML. O que devemos fazer é criar um descritor da nossa instalação e compilá-lo utilizando o IzPack.

O funcionamento do instalador é bastante simples: Ele é composto de painéis, que são exibidos de acordo com a ordem em que são declarados no XML. Existe uma boa quantidade de painéis disponíveis, mas é possível definir os seus próprios. Entre os disponíveis estão o de boas vindas, o de informações gerais sobre o produto, o de contrato e licença, o de seleção de pacotes, o de criação de atalhos, entre outros.

O instalador, assim como o desintalador, também tem o conceito de Listeners (que não abordaremos aqui), com os quais se pode executar código Java em momentos específicos da instalação ou desintalação.

Primeiro Projeto

Agora, vamos criar nosso primeiro instalador. Para isso, vamos criar uma estrutura de diretórios que representa o projeto do nosso produto.

+-Produto
+-dist

+-produto.jar
+-docs
+-readme.txt
+-license.txt
+-manual.pdf
+-extras
+-installer.xml
+-WinShortcurSpec.xml
+-images
+-produto.ico
+-src

O primeiro passo para criarmos nosso instalador é definir os arquivos que irão compor os pacotes. Nosso instalador terá somente 2 pacotes, que chamaremos de principal e documentação. O pacote principal irá conter o arquivo produto.jar e será obrigatório. O pacote documentação conterá o arquivo manual.pdf e será opcional.

Agora precisamos definir quais painéis serão exibidos. No nosso exemplo, utilizaremos os painéis de boas vindas, de informações sobre o produto, de licença, de seleção de diretório de instalação, de seleção de pacotes e de criação de atalhos, além do painel de progresso da instalação e de finalização.

Uma vez definido nossos pacotes e quais painéis utilizaremos, vamos agora escrever nosso descritor do instalador (XML).

O descritor

O arquivo de descrição do instalador é um XML bastante simples, possui, basicamente 7 elementos.

   01 <installation version="1.0">
02 <info> ... </info>
03 <guiprefs ... > ... </guiprefs>
04 <locale> ... </locale>
05 <native .../>
06 <resources> ... </resource>
07 <panels> ... </panels>
08 <packs> ... </packs>
09 </installation>
  • A seção info contem as informações exibidas no painel de boas vindas. Ela pode conter nome e versão do produto, autores, site do desenvolvedor e a versão de Java para a instalação do produto.
  • A seção guiprefs contem as configuração visuais do instalador, como tamanho da tela, look and feel, etc.
  • A seção locale define as linguagens disponíveis no instalador.
  • A seção native define as bibliotecas nativas (dlls e sos) que por ventura sejam necessárias.
  • A seção resources contem os recuros que são requeridos por alguns tipos de painéis, como o de licença por exemplo.
  • A seção panels define quais painéis e em que ordem eles devem aparecer.
  • Por último, a seção packs contem os pacotes disponíveis para instalação.

Agora que já conhecemos o modelo do descritor,vamos criar o nosso.

   01 <?xml version="1.0" encoding="iso-8859-1"    standalone="yes"?>
02 <installation version="1.0">
03 <info>
04 <appname>Produto Java</appname>
05 <appversion>1.0 RC</appversion>
06 <authors>
07 <author name="Jarbas Jocênio" email="jjocenio@yahoo.com.br"/>
08 </authors>
09 <url>http://www.meusite.com.br</url>
10 <javaversion>1.5</javaversion>
11 </info>
12
13 <guiprefs width="480" height="320" resizable="no"/>
14
15 <locale>
16 <langpack iso3="por"/>
17 </locale>
18
19 <native type="izpack" name="ShellLink.dll"/>
20
21 <resources>
22 <res src="docs/readme.txt" id="InfoPanel.info"/>
23 <res src="docs/licence.txt" id="LicencePanel.licence"/>
24 <res src="extras/install/WinShortcutSpec.xml" id="shortcutSpec.xml"/>
25 </resources>
26
27 <panels>
28 <panel classname="HelloPanel"/>
29 <panel classname="InfoPanel"/>
30 <panel classname="LicensePanel"/>
31 <panel classname="TargetPanel"/>
32 <panel classname="PacksPanel"/>
33 <panel classname="ShortcutPanel"/>
34 <panel classname="InstallPanel"/>
35 <panel classname="SimpleFinishPanel"/>
36 </panels>
37
38 <packs>
39 <pack name="Principal" required="yes">
40 <description>Contém os arquivos necessários para execução do programa</description>
42 <file src="imagens/produto.ico" targetdir="$INSTALL_PATH">
42 <fileset dir="dist" targetdir="$INSTALL_PATH">
43 <include name="**/*" />
44 </fileset>
45 </pack>
46
47 <pack name="Documentação" required="no">
48 <description>Contém o manual do programa</description>
49 <file src="docs/manual.pdf" targetdir="$INSTALL_PATH">
50 </pack>
51 </packs>
52 </installation>

Vamos agora enteder alguns items que não são bem claros no XML.

Na linha 19, o elemente native define a dll que é utilizada pelo painel de criação de atalhos para o Windows. Essa dll é necessária pois não é possível criar atalhos no windows com código Java puro.

Nas linhas 22 e 23 são, no elemento resources, são definidos os recursos que serão utilizados pelos paineis de informação sobre o produto e licença, respectivamente. O atributo id da tag, identifica o recurso que será requisitado pelo painel.

No elemento packs, a seleção de arquivos para o pacote é feita utilizando o mesmo mecanismo de seleção de arquivos do ANT.

Por último, na linha 24, é definido o arquivo que especifica quais atalhos devem ser criados e onde eles devem ser colocados. O arquivo WinShortcuSpec.xml tem o seguinte conteúdo.

   01 <?xml version="1.0" encoding="iso-8859-1"?>
02 <shortcuts>
03 <programGroup defaultName="Produto Java" location="startMenu"/>
04 <shortcut name="Produto Java"
05 target="$INSTALL_PATH\produto.jar"
06 iconFile="$INSTALL_PATH\produto.ico"
07 commandLine="" workingDirectory="$INSTALL_PATH"
08 description="Clique aqui para iniciar o Produto Java"
09 programGroup="yes" desktop="yes" applications="no"
10 startMenu="no" startup="no">
11 </shortcut>
12
13 <shortcut name="Produto Java"
14 target="$INSTALL_PATH\manual.pdf"
15 commandLine="" workingDirectory=""
16 description="Clique aqui para ler o manual do Produto Java"
17 programGroup="yes" desktop="no" applications="no"
18 startMenu="no" startup="no">
19 <createForPack name="Documentação"/>
20 </shortcut>
21
22 </shortcuts>

Acredito que o arquivo seja autoexplicativo. No entanto, ainda tem um ponto obscuro para darmos uma rápida passada.

Na linha 19, a tag createForPack faz com que o atalho para a documentação só seja criado se o pacote tiver sido selecionado para a instalação.

Pronto. Terminamos nosso descritor, agora vamos gerar o instalador.

Compilando o instalador

Existem 2 formas de compilar o instalador: Através da linha de comando ou utilizando o Ant.

Para compilar o instalador através da linha de comando

  1. Abra uma janela DOS;
  2. Vá até o diretório onde está o seu projeto, na raíz. No nosso caso Produto;
  3. Certifique-se que o diretório bin do IzPack está no path de execução de seu sistema;
  4. Digite compile install.xml -b . -o install.jar -k standard.

Para incluir a criação do instalador no arquivo build.xml do seu projeto

  1. Defina a anttask como abaixo
    1. <taskdef name="izpack" classpath="${izpack.dir}/lib/compiler.jar"
      classname="com.izforge.izpack.ant.IzPackTask"/>
  2. Crie a task como no modelo
    1. <izpack input="extras/installer.xml"
      output="dist/install/produto-install.jar"
      installerType="standard" basedir="${basedir}"
      izPackDir="${izpack.dir}/"/>

A property ${izpack.dir} deve apontar para o diretório de instalação do IzPack.

Agora é só empacotar tudo e enviar para o cliente.

Dicas

Existe uma ferramenta opensource que inicia o instalador depois de verificar se a versão de Java instalada é a correta e, em caso negativo, já instala/atualiza a versão para a versão correta. O nome dessa ferramenta é IzPack Native Launcher e pode ser baixada na própria página de downloads do IzPack. Existem 2 versões: uma basead na biblioteca qt e outra baseada na biblioteca wxWidgets. Eu utilizo a segundo porque achei mais compatível com os ambientes que encontro.

Referências

IzPack Tutorial - http://www.izforge.com/izpack/_media/izpack-tutorial.pdf?id=downloads&cache=cache
IzPack Manual - http://www.izforge.com/izpack/_media/izpack-doc.pdf?id=downloads&cache=cache



comentários: 0