BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Construindo aplicativos instaláveis auto-suficientes em Java com o JEP 343: Packaging Tool

Construindo aplicativos instaláveis auto-suficientes em Java com o JEP 343: Packaging Tool

A comunidade OpenJDK liberou uma versão de testes do JEP 343: Packaging Tool. O JEP 343: Packaging Tool, também conhecido como jpackage, é uma nova ferramenta para empacotar aplicações Java auto-suficientes junto com a Java Runtime Environment. Esse protótipo baseado na ferramenta javapackager do JavaFX é destinado a desenvolvedores interessados no jpackage.

Por um longo tempo, os desenvolvedores Java tem desejado construir aplicações que podem ser instaladas nativamente em uma plataforma, ao invés de distribuir jars e configurar o classpath. Com o jpackage, as aplicações Java podem ser instaladas/desinstaladas de uma forma que os usuários de uma plataforma específica estão acostumados a fazer, o jpackage suporta os formatos msi e exe no Windows, pkg e dmg no MacOS, e deb e rpm no Linux. Os usuários finais não devem notar nenhuma diferença ao instalar uma aplicação empacotada com o jpackage.

O jpackage tenta preencher a lacuna deixada por outras tecnologias como:

  • javapackager, uma ferramenta distríbuida com o JDK 8 da Oracle, que foi removido no JDK 11 como parte da remoção do JavaFX;
  • Java Web Start, que foi marcado como deprecated no Java 9 junto com o Java Applet Viewer e JNLP, e removido do JDK 11 da Oracle;
  • pack200, uma ferramenta projetada para comprimir arquivos jar, que foi marcada como deprecated no JDK 11 para a remoção em um release futuro.

O jpackage suporta os seguintes tipos de aplicações:

  • Aplicações modulares que tem uma imagem de tempo de execução customizada pelo jlink;
  • Aplicações modulares que estão em arquivos jar modulares ou arquivos jmod;
  • Aplicações legadas que executam no classpath, e estão em um ou mais arquivos jar.

O jpackage produz uma imagem de aplicação Java que inclui todas as dependências Java necessárias. A imagem é armazenada em um único diretório no sistema de arquivos e pode incluir o seguinte:

  • Launcher nativo do aplicativo;
  • Imagem da runtime do Java, incluindo os módulos do aplicativo, quando o aplicativo é modularizado;
  • Recursos da aplicação, tais como jar, ico, png;
  • Arquivos de configuração, tais como plist, cfg, properties.

O jpackage está previsto para ser parte do JDK 13 em um novo módulo jdk.jpackage. A interface de linha de comando (CLI) estará de acordo com o JEP 293: Guidelines for JDK Command-Line Tool Options. Além disso, é possível acessar o jpackage através do ToolProvider API (java.util.spi.ToolProvider) sob o nome "jpackage".

A interface de linha de comando do jpackage

Ao executar jpackage --help, uma séries de informações valiosas é exibida. Vamos explorar algumas delas.

O jpackage tem dois modos:

  • create-image - gera uma imagem de aplicação para uma plataforma específica;
  • create-installer - gera um instalador para a aplicação para uma plataforma específica.

Para gerar uma imagem de uma aplicação modular:

jpackage create-image --output outputdir --name AppName \
    --main-class package.ClassName -module moduleName -p modulePath
jpackage create-image --o outputdir -n AppName \
    -c package.ClassName -m moduleName -p modulePath

Para gerar uma imagem de uma aplicação não modular:

jpackage create-image --input inputdir --output outputdir \
    --name AppName --main-class package.ClassName --main-jar MyJar.jar
jpackage create-image -i inputdir -o outputdir -n AppName \
    -c package.ClassName -j MyJar.jar

Para gerar um instalador para a aplicação:

jpackage create-installer -i inputdir -o outputdir \
    -n  -c package.ClassName -j MyJar.jar
jpackage create-installer -o outputdir -n \
    --app-image 

Para gerar um instalador da runtime do Java:

jpackage create-installer --runtime-installer\
    --name  --output outputdir
jpackage create-installer --runtime-installer \
    -n  -o outputdir --runtime-image 

Algumas opções válidas para todas plataformas:

  • --main-jar -j <main jar file> - O principal JAR da aplicação, contendo a classe principal;
  • --main-class -c <class name> - Nome qualificado da classe principal do aplicativo a ser executado;
  • --installer-type <type> - O tipo do instalador criado no modo create-image (msi, exe, rpm, deb, dmg, pkg, pkg-app-store) ;
  • --runtime-installer - gera um instalador do Java runtime para uma plataforma específica;
  • --jvm-args <java vm arguments> - Argumentos Java passados para a jvm;
  • --install-dir <file path> - Caminho absoluto do diretório de instalação da aplicação.

Algumas opções válidas somente no Mac OS X:

  • --mac-sign - solicita que o pacote seja assinado;
  • --mac-bundle-name <name string> - Nome da aplicação que vai ser exibido no Menu Bar;
  • --mac-app-store-category <category string> - Categorias na Mac App Store;
  • --mac-signing-keychain <file path> - Path para o keychain.

Outros detalhes interessantes que são importantes notar em relação ao jpackage incluem:

  • Suporte ao empacotamento de aplicativos Java de modo que eles sejam adequados para envio às lojas de aplicativos do Windows ou MacOS;
  • Integração nativa ao definir associações de arquivos para permitir que um determinado aplicativo seja executado quando um arquivo com um sufixo associado é aberto;
  • Compilação cruzada não será suportada; pacotes Windows devem ser gerados executando o jpackage no Windows;
  • Tela de abertura nativa não será suportada;
  • Mecanismo de auto-update não será suportado;
  • O jpackage não vai estar disponível para o Solaris;
  • O aplicativo Java Web Start e os recursos específicos do JavaFX não serão suportados;
  • Não será disponibilizado uma interface gráfica do jpackage.

Maiores detalhes sobre o jpackage podem ser encontrados na página do JEP 343: Packaging Tool. Os desenvolvedores que quiserem testar o jpackage, podem realizar o download dos pacotes específicos para Windows, MacOS e Linux.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT