tutorial oxygen interfaz instalar grafica español ejemplos java installer jar software-distribution

oxygen - ¿Cuál es la mejor forma de distribuir aplicaciones Java?



windowbuilder eclipse oxygen (16)

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

En mi experiencia (desde la evaluación de 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 " Features " en su sitio web.

install4j es una herramienta comercial, sin embargo. Especialmente si sus necesidades son relativamente simples (simplemente distribuya una aplicación e instale algunos artefactos), existen muchas otras buenas opciones, incluidas las gratuitas (como izPack o el ya mencionado http://launch4j.sourceforge.net/ ). Pero usted pidió la mejor manera, y para mi conocimiento actual install4j es el indicado, especialmente para distribuir aplicaciones Java (EE) más grandes o más complicadas.

Java es uno de mis lenguajes de programación de elección. 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é ocurre si la aplicación Java necesita instalar artefactos en la computadora del usuario? ¿Hay algún buen sistema de instalación / empaquetado de Java?


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

Muchos scripts de muestra están disponibles en los Ejemplos de código y en las páginas de Real World Installers , como por ejemplo:

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


Comprimiría el archivo jar junto con otros frascos dependientes, archivos de configuración y documentación junto con run.bat / run.sh. El usuario final debería poder descomprimirlo en cualquier ubicación y editar run.bat si es necesario (debería ejecutarse sin editar en la mayoría de los casos). Un instalador puede ser útil si desea crear entradas en el menú de inicio, escritorio, bandeja del sistema, etc.

Como usuario, prefiero descomprimir y ejecutar el tipo de instalación (sin entradas del menú de inicio, por favor). Sin embargo, las personas ajenas a la industria de TI pueden tener diferentes preferencias. Por lo tanto, si la aplicación está destinada en gran medida a los desarrolladores, la ruta zip-run.bat y las aplicaciones para el público en general se pueden instalar utilizando un instalador.


Depende de cuán sofisticados sean sus usuarios objetivo. En la mayoría de los casos, quiere aislarlos del hecho de que está ejecutando una aplicación basada en Java. Bríndeles un instalador nativo que haga lo correcto (crear entradas en el menú de inicio, iniciadores, registrarse con programas para agregar o quitar, etc.) y ya incluye un tiempo de ejecución Java (para que el usuario no tenga que saberlo ni preocuparse por él). 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. Se puede integrar fácilmente con Ant y puedes 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 JRE para estar ya presente en el sistema de destino, lo que significa instaladores más pequeños y le ahorra algunos dolores de cabeza. También me gustaría mencionar que tenemos licencias gratuitas para proyectos de código abierto


Desarrollo aplicaciones Eclipse RCP. Normalmente para iniciar una aplicación de eclipse se incluye un iniciador ejecutable. Incluí la máquina virtual java dentro de la carpeta de la aplicación en el directorio / jre para garantizar que se utilizará la versión Java correcta.

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


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

Dado que estoy usando Maven2 para compilar, la implementación es sencilla: copie el contenedor incorporado a la ubicación en el servidor, actualice el archivo jnlp si es necesario y listo.


Hay una variedad de soluciones, según sus requisitos de distribución.

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

  2. Use 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 yo uso actualmente.

  3. Use Webstart. Esto también asume que el usuario tiene instalada la versión java correcta, 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 un problema con implementaciones más grandes porque tiene algunos fallos raros. Puede mejorar con la nueva tecnología de plug-in en Java 1.7.

  4. Utilice un compilador de código nativo como Excelsior JET y distribúyalo como un ejecutable, o envuélvalo en un instalador. Caro, y generalmente lo vincula a una versión un poco más antigua de Java, y hay algo de dolor con la carga dinámica de clases, pero es muy efectivo para una implementación a gran escala en la que necesita minimizar sus problemas de soporte.


La mejor respuesta depende de la plataforma. Para la implementación en Windows, he tenido buenos resultados usando una combinación de one-jar y http://launch4j.sourceforge.net/ . Me tomó algo de tiempo configurar mi entorno de compilación correctamente (en su mayoría, guiones de hormigas), pero ahora es bastante sencillo.



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

java -jar jarname.jar

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


Si se trata de 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 que elija. La gente de Mac quiere una .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 puede contar con que la JVM ya está allí. En Windows, deberá verificarlo e instalarlo si es necesario. Los usuarios de Linux no ejecutarán las aplicaciones de la GUI de Java, y las pocas que lo harán, sabrán qué hacer con un ejecutable .jar.


installanywhere es bueno pero caro uno - no he encontrado (como) un buen gratis


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


El instalador avanzado hace que sea más fácil empaquetar 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.



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

Encontré lo que necesitaba usando el complemento Maven2 Assembly : plugin Maven2 Assembly

Esto parece duplicar la funcionalidad de one-jar , pero no requiere configuración adicional para hacerlo funcionar.