it-swarm-es.tech

¿Cuál es la mejor manera de distribuir aplicaciones Java?

Java es uno de mis lenguajes de programación de elección. Aunque siempre me encuentro con el problema de distribuir mi aplicación a los usuarios finales.

Darle a un usuario un JAR no siempre es tan fácil de usar como me gustaría, y usar Java WebStart requiere que mantenga un servidor web.

¿Cuál es la mejor manera de distribuir una aplicación Java? ¿Qué sucede si la aplicación Java necesita instalar artefactos en la computadora del usuario? ¿Hay algún buen sistema de instalación/empaquetado de Java por ahí?

112
Laplie Anderson

Existe una variedad de soluciones, dependiendo de sus requisitos de distribución.

  1. Solo usa un frasco. Esto supone que el usuario tiene instalada la versión correcta de Java, de lo contrario, obtendrá excepciones de "versión de formato de archivo de clase". Esto está bien para la distribución interna dentro de una empresa.

  2. Utilice launch4j y un instalador como NSIS. Esto le da mucho más control, aunque el usuario todavía puede hacer cosas estúpidas como desinstalar el tiempo de ejecución de Java. Este es probablemente el enfoque más popular, y lo que uso actualmente.

  3. Utilice Webstart. Esto también supone que el usuario tiene instalada la versión correcta de Java, pero es mucho más fácil ponerse en marcha. Mi experiencia es que esto está bien para entornos de intranet estrechamente controlados, pero se convierte en una molestia con implementaciones más grandes porque tiene algunas fallas extrañas. Puede mejorar con la nueva tecnología de plug-in en Java 1.7.

  4. Use un compilador de código nativo como Excelsior JET y distribúyalo como un ejecutable, o envuélvalo en un instalador. Es costoso y, por lo general, lo vincula con una versión un poco más antigua de Java, y existe cierta dificultad con la carga dinámica de clases, pero es muy efectivo para implementaciones a gran escala en las que necesita minimizar sus problemas de soporte.

85
Noel Grandin
9
Dmitry Leskov

instalador avanzado facilita el empaquetado de aplicaciones Java como ejecutables de Windows, y es bastante flexible en la forma en que puede configurarlo. Descubrí que para distribuir aplicaciones Java a clientes de Windows, esta es la forma más fácil de hacerlo.

5
rustyshelf

JSmooth es un programa simple que toma tu jar y lo envuelve en un archivo ejecutable estándar de Windows. Viene con una GUI simple que le permite configurar la JVM requerida, empaquetarla con la aplicación o proporcionar una opción para descargarla si aún no está instalada. Puede enviar el archivo exe tal como está o comprimirlo con posibles dependencias (o dejar que el programa descargue las dependencias adicionales de la red en el inicio). También es gratis, como en cerveza y habla, lo que puede (o no) ser algo bueno.

4
stian

Depende de qué tan sofisticados sean sus usuarios objetivo. En la mayoría de los casos, desea aislarlos del hecho de que está ejecutando una aplicación basada en Java. Ofrézcales un instalador nativo que haga lo correcto (cree entradas del menú de inicio, lanzadores, regístrese con programas de agregar/quitar, etc.) y ya incluya un tiempo de ejecución de Java (para que el usuario no tenga que saberlo ni cuidarlo). Me gustaría sugerir nuestra herramienta de instalación multiplataforma, BitRock InstallBuilder . Aunque no está basado en Java, se usa comúnmente para empaquetar aplicaciones Java. Puede integrarse fácilmente con Ant y puede construir instaladores de Windows desde Unix/Linux/Mac y viceversa. Debido a que los instaladores generados son nativos, no requieren un paso de autoextracción o un JRE para estar ya presente en el sistema de destino, lo que significa que los instaladores más pequeños le ahorran algunos dolores de cabeza. También me gustaría mencionar que tenemos licencias gratuitas para proyectos de código abierto.

4
Daniel Lopez

los archivos ejecutables son mejores, pero están limitados por la plataforma, es decir, usan gcj: http://gcc.gnu.org/Java/ para que linux produzca ejecutables y use launch4j: http://launch4j.sourceforge.net/ para producir ejecutables de windows. Para empaquetar en linux puede usar cualquier empaquetador rpm o deb. Para win32 try http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System

3
zurk

Si es una aplicación de usuario final con GUI real, debe ignorar el idioma en el que escribió el programa (Java) y usar un instalador nativo para cada una de las plataformas elegidas. La gente de Mac quiere un .dmg y en Windows un instalador .msi o .exe es el camino a seguir. En Windows, prefiero NSIS de NullSoft solo porque es menos objetable que InstallShield o InstallAnywhere. En OSX puedes contar con la JVM que ya está allí. En Windows, deberá verificarlo e instalarlo si es necesario. La gente de Linux no ejecutará aplicaciones Java GUI, y los pocos que lo harán, sabrán qué hacer con un ejecutable .jar.

3
Ry4an Brase

Aunque no he usado NSIS (Nullsoft Scriptable System System), hay scripts de instalación que verifican si el JRE requerido está instalado en el sistema de destino.

Muchos scripts de muestra están disponibles en Ejemplos de código y Instaladores del mundo real páginas, tales como:

(Tenga en cuenta que en realidad no he usado ninguno de los scripts, así que no lo tome como una aprobación).

3
coobird

Necesitaba una forma de empaquetar mi proyecto y sus dependencias en un solo archivo jar.

Encontré lo que necesitaba usando el complemento de ensamblaje de Maven2: Complemento de ensamblaje de Maven2

Esto parece duplicar la funcionalidad de one-jar , pero no requiere una configuración adicional para que funcione.

2
David Carlson

Para aplicaciones Java simples me gusta usar Jar's. Es muy sencillo distribuir un archivo en el que un usuario puede hacer clic en (Windows), o

Java -jar jarname.jar

En mi humilde opinión, jar es el camino a seguir cuando la simplicidad es un requisito principal.

1
jjnguy

Desarrollo aplicaciones de Eclipse RCP. Normalmente, para iniciar una aplicación Eclipse se incluye un lanzador ejecutable. Incluyo la máquina virtual Java dentro de la carpeta de la aplicación en un subdirectorio/jre para asegurar que se utilizará la versión Java correcta.

Luego empacamos con Inno Setup para la instalación en la máquina del usuario.

1
Mario Ortegón

¿Cuál es la mejor manera de distribuir una aplicación Java? ¿Qué sucede si la aplicación Java necesita instalar artefactos en la computadora del usuario? ¿Hay algún buen sistema de instalación/empaquetado de Java por ahí?

En mi experiencia (de evaluar varias opciones ), install4j es una buena solución. Crea instaladores nativos para cualquier plataforma y está específicamente orientado a la instalación de aplicaciones Java. Para más detalles, consulte " Características " en su sitio web.

sin embargo, install4j es una herramienta comercial. Especialmente si sus necesidades son relativamente simples (solo distribuya una aplicación e instale algunos artefactos), existen muchas otras buenas opciones, incluidas las gratuitas (como izPack o el ya mencionado Lauch4j ). Pero me pidió el best way, y, según mi conocimiento, install4j es el adecuado, especialmente para distribuir aplicaciones Java (EE) más grandes o más complicadas.

1
Jonik

La mejor respuesta depende de la plataforma. Para la implementación en Windows, he tenido buenos resultados con una combinación de one-jar y launch4j . Tomó un poco de tiempo configurar mi entorno de compilación correctamente (en su mayoría scripts ant), pero ahora es bastante sencillo.

0
qualidafial

Bueno, desde mi punto de vista, el mecanismo de distribución superior es usar algo como ClickOnce , o WebStart . Simplemente implementa la versión en el servidor y llega automáticamente a los clientes cuando se lanza la versión. Además, la plataforma RCP de Eclipse contiene UpdateManager que hace lo que hace WebStart, pero también mucho más.

Ya que estoy usando Maven2 para la construcción, la implementación es sencillamente sencilla: copie el tarro construido en la ubicación en el servidor, actualice el archivo jnlp si es necesario y listo.

0
Petr Macek

installanywhere es bueno pero costoso - no he encontrado (como) bueno gratis

0
Tom