Qual é a melhor maneira de distribuir aplicativos Java? [fechadas]

115

Java é uma das minhas linguagens de programação de escolha. Sempre me deparo com o problema de distribuir meu aplicativo aos usuários finais.

Dar a um usuário um JAR nem sempre é tão amigável quanto eu gostaria e usar o Java WebStart requer que eu mantenha um servidor web.

Qual é a melhor maneira de distribuir um aplicativo Java? E se o aplicativo Java precisar instalar artefatos no computador do usuário? Existem bons sistemas de instalação / empacotamento Java por aí?

Laplie Anderson
fonte

Respostas:

89

Existem várias soluções, dependendo de seus requisitos de distribuição.

  1. Basta usar uma jarra. Isso pressupõe que o usuário tenha a versão java correta instalada, caso contrário, o usuário obterá exceções de "versão de formato de arquivo de classe". Isso é adequado para distribuição interna dentro de uma empresa.

  2. Use o launch4j e um instalador como o NSIS. Isso dá a você muito mais controle, embora o usuário ainda possa fazer coisas estúpidas como desinstalar o tempo de execução do java. Esta é provavelmente a abordagem mais popular e a que uso atualmente.

  3. Use o Webstart. Isso também pressupõe que o usuário tenha a versão java correta instalada, mas é muito mais fácil de começar. Minha experiência é que isso é bom para ambientes de intranet rigidamente controlados, mas se torna um problema com implantações maiores porque tem muitas falhas estranhas. Pode ficar melhor com a nova tecnologia de plug-in do Java 1.7.

  4. Use um compilador de código nativo como o Excelsior JET e distribua como um executável ou agrupe-o em um instalador. Caro e geralmente vincula você a uma versão um pouco mais antiga do java, e há alguns problemas com o carregamento dinâmico de classes, mas é muito eficaz para implantação em grande escala, onde você precisa minimizar os aborrecimentos de suporte.

Noel Grandin
fonte
6

O instalador avançado facilita o empacotamento de aplicativos java como executáveis ​​do Windows e é bastante flexível na forma como você pode configurá-lo. Descobri que, para distribuir aplicativos Java para clientes Windows, essa é a maneira mais fácil de fazer.

estante enferrujada
fonte
5

JSmooth é um programa simples que pega seu jar e o envolve em um arquivo executável padrão do Windows. Ele vem com uma GUI simples que permite configurar a JVM necessária, empacotá-la com o aplicativo ou fornecer uma opção para fazer o download, se ainda não estiver instalada. Você pode enviar o arquivo exe como está ou compactá-lo com as dependências possíveis (ou deixar o programa baixar as dependências extras da rede na inicialização). Também é gratuito, como na cerveja e na fala, o que pode (ou não) ser uma coisa boa.

Stian
fonte
4

Depende de quão sofisticados são seus usuários-alvo. Na maioria dos casos, você deseja isolá-los do fato de estar executando um aplicativo baseado em Java. Forneça-os com um instalador nativo que faz a coisa certa (criar entradas do menu iniciar, lançadores, registrar-se com adicionar / remover programas, etc.) e já agrupar um Java runtime (para que o usuário não precise saber ou se preocupar com isso). Eu gostaria de sugerir nossa ferramenta de instalação de plataforma cruzada, BitRock InstallBuilder. Embora não seja baseado em Java, é comumente usado para empacotar aplicativos Java. Ele pode ser facilmente integrado ao Ant e você pode construir instaladores do Windows a partir do Unix / Linux / Mac e vice-versa. Como os instaladores gerados são nativos, eles não exigem que uma etapa de autoextração ou um JRE já esteja presente no sistema de destino, o que significa instaladores menores e evita algumas dores de cabeça. Também gostaria de mencionar que temos licenças gratuitas para projetos de código aberto

Daniel Lopez
fonte
3

Se for um aplicativo de usuário final com interface gráfica real, você deve ignorar o idioma no qual escreveu o programa (Java) e usar um instalador nativo para cada uma das plataformas escolhidas. O pessoal do Mac quer um .dmg e, no Windows, um instalador .msi ou .exe é o caminho a seguir. No Windows, prefiro o NSIS da NullSoft apenas porque é menos questionável do que o InstallShield ou o InstallAnywhere. No OSX você pode contar com a JVM já presente. No Windows, você precisará verificar e instalá-lo para eles, se necessário. O pessoal do Linux não executa aplicativos Java GUI e os poucos que o fazem sabem o que fazer com um .jar executável.

Ry4an Brase
fonte
3

Embora eu não tenha usado o NSIS (Nullsoft Scriptable Installer System), existem scripts de instalação que verificam se o JRE necessário está instalado ou não no sistema de destino.

Muitos scripts de amostra estão disponíveis nas páginas Exemplos de código e Instaladores do mundo real , como:

(Observe que, na verdade, não usei nenhum dos scripts, portanto, não tome isso como um endosso.)

coobird
fonte
2

Eu precisava de uma maneira de empacotar meu projeto e suas dependências em um único arquivo jar.

Encontrei o que precisava usando o plugin Maven2 Assembly : Maven2 Assembly plugin

Isso parece duplicar a funcionalidade de um jar , mas não requer configuração adicional para funcionar.

David Carlson
fonte
1

Para aplicativos Java simples, gosto de usar o Jar's. É muito simples distribuir um arquivo em que o usuário pode simplesmente clicar (Windows), ou

java -jar jarname.jar

IMHO, jar é o caminho a seguir quando a simplicidade é o principal requisito.

jjnguy
fonte
1

Eu desenvolvo aplicativos Eclipse RCP. Normalmente, para iniciar um aplicativo eclipse, um ativador executável é incluído. Incluo a máquina virtual java dentro da pasta do aplicativo em um subdiretório / jre para garantir que a versão correta do java seja usada.

Em seguida, empacotamos com Inno Setup para instalação na máquina do usuário.

Mario Ortegón
fonte
1

Qual é a melhor maneira de distribuir um aplicativo Java? E se o aplicativo Java precisar instalar artefatos no computador do usuário? Existem bons sistemas de instalação / empacotamento Java por aí?

Na minha experiência (com base na avaliação de várias opções ), install4j é uma boa solução. Ele cria instaladores nativos para qualquer plataforma e é especificamente voltado para a instalação de aplicativos Java. Para obter detalhes, consulte " Recursos " em seu site.

install4j é uma ferramenta comercial, no entanto. Especialmente se suas necessidades são relativamente simples (basta distribuir um aplicativo e instalar alguns artefatos), existem muitas outras boas opções, inclusive gratuitas (como o izPack ou o já mencionado Lauch4j ). Mas você pediu a melhor maneira e, pelo que sei, install4j é a única, especialmente para distribuir aplicativos Java (EE) maiores ou mais complicados.

Jonik
fonte
0

A melhor resposta depende da plataforma. Para implantação no Windows, obtive bons resultados usando uma combinação de one-jar e launch4j . Demorou um pouco para configurar meu ambiente de construção corretamente (scripts de formigas, principalmente), mas agora é bastante fácil.

qualidafial
fonte
0

Bem, do meu ponto de vista, o mecanismo de distribuição superior é usar algo como ClickOnce ou tecnologia WebStart . Você apenas implanta a versão no servidor e ela chega automaticamente aos clientes quando a versão é lançada. Além disso, a plataforma Eclipse RCP contém UpdateManager que faz o que o WebStart faz, mas também muito mais.

Como estou usando o Maven2 para a construção, a implantação é muito fácil: copie o jar construído para o local no servidor, atualize o arquivo jnlp se necessário e pronto.

Petr Macek
fonte
0

instalar em qualquer lugar é bom, mas caro - eu não encontrei um (tão) bom e gratuito

Tom
fonte
-2

Gostaria de compactar o arquivo jar junto com outros jars dependentes, arquivos de configuração e documentação junto com um run.bat / run.sh. O usuário final deve ser capaz de descompactá-lo para qualquer local e editar o run.bat se necessário (ele deve ser executado sem edição na maioria dos casos). Um instalador pode ser útil se você deseja criar entradas no menu iniciar, área de trabalho, bandeja do sistema, etc.

Como usuário, prefiro descompactar e executar o tipo de instalação (sem entradas do menu iniciar, por favor). No entanto, pessoas fora da indústria de TI podem ter preferências diferentes. Portanto, se o aplicativo é amplamente voltado para desenvolvedores, a rota zip-run.bat e os aplicativos para o público em geral podem ser instalados usando um instalador.

Rejeev Divakaran
fonte