2008-09-17 48 views
104

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.¿Cuál es la mejor forma de distribuir aplicaciones Java?

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 forma 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?

+0

Java Web Start se puede utilizar fuera de cualquier enlace como un sistema de archivos como una unidad de CD o de red. De acuerdo, no te da tanto. Nota: eclipse no usa un instalador, solo desempaquételo y ejecútelo. Quizás no necesites un instalador. –

+1

En la actualidad, es muy sencillo implementar una aplicación Java WebStart como, por ejemplo, Google Application Engine. –

+5

Es una pena que esta pregunta esté cerrada. No estoy de acuerdo con el motivo declarado 'principalmente basado en la opinión'. Las respuestas proporcionadas no se basan en la opinión sino en la experiencia. Siempre recibo buenas respuestas basadas en la experiencia. Aquellos que no pueden aprender de la historia están condenados a repetirlo. – bouvierr

Respuesta

80

Existen diversas soluciones, según sus requisitos de distribución.

  1. Simplemente use una jarra. 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. 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 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.

+4

Solo una nota en Webstart: Siempre que el usuario tenga una versión de Java instalada que no sea de la edad de piedra (por ejemplo, 1.2), se le puede decir a webstart que descargue e instale una versión Java más nueva de la que necesita para su programa aún no está allí. Mire la sintaxis del archivo .jnlp. Por supuesto, todavía muestra de manera bastante prominente que está utilizando Java, que podría ser inapropiado dependiendo de los clientes con los que trate. En esos casos, debe tener algún tipo de formato de archivo/instalador "nativo" y ocultar los detalles de implementación lo más posible. –

+8

No me gusta Webstart. Tiene demasiada marca de Java/Sun. Es difícil hacer que funcione bien. La configuración de la firma del código es más problemática de lo que vale y el usuario no comprende los beneficios y mensajes de seguridad de todos modos. Si desea hacer algo en el sistema de los usuarios, tendrá que pagar su certificado de firma de código para deshacerse de las aterradoras advertencias. Se trata de un caché complicado que puede causar problemas. Quizás OSGi o los próximos módulos de Java ofrecerán beneficios de actualización automática similares. Utilizo una variación de # 2 y creo DMG/Packager para mac de Ant. – Cal

+0

Utilicé NSIS como sugeriste. También miré launch4j. ¿Por qué recomienda usar ambos? – jacknad

1

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

java -jar jarname.jar 

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

0

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 launch4j. Me tomó algo de tiempo configurar mi entorno de compilación correctamente (en su mayoría, guiones de hormigas), pero ahora es bastante sencillo.

3

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.

+3

realmente? La gente de Linux no ejecutará aplicaciones gui? entonces supongo que su programa es inútil para ellos, haciendo que toda la discusión sea discutible. – Matt

+0

@Matt ¿por qué está asumiendo que la aplicación original era una aplicación GUI? He instalado muchas aplicaciones java de línea de comando en Linux, y las que vienen como .deb o .rpms son especialmente apreciadas. –

+1

El título original decía GUI. Además, si webstart ha aparecido, es una buena apuesta que es una aplicación de interfaz gráfica de usuario. Finalmente, decir que los usuarios de Linux no usan aplicaciones de GUI es totalmente falso. – Matt

0

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

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

5

advanced installer 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.

+2

como nota, cuesta ... – rogerdpack

1

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.

-2

Comprimiría el archivo jar junto con otros archivos jar, archivos de configuración y documentación dependientes junto con un archivo 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.

3

Aunque no he usado 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 ejemplo están disponibles en las páginas Code Examples y Real World Installers, tales como:

(Tenga en cuenta que no he utilizado en realidad cualquiera de los scripts , por favor no lo tome como endoso.)

4

JSmooth es a 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.

0

InstallAnywhere es bueno, pero caro uno - no he encontrado (como) un bien libre

+0

Consulte esto para las alternativas de InstallAnywhere, incluidas algunas gratuitas (así como las comerciales que tienen un precio mucho más razonable): http://stackoverflow.com/questions/759855/what-are-good-installanywhere-replacements-for-installing -a-java-ee-application – Jonik

2

necesitaba una manera de empaquetar mi proyecto y sus dependencias en un único archivo JAR.

encontré lo que necesitaba usar el plugin Asamblea Maven2: Maven2 Assembly plugin

Esto parece duplicar la funcionalidad de one-jar, pero no requiere ninguna configuración adicional para ponerlo en marcha.

4

Depende de lo sofisticados que 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

1

¿Cuál es la mejor forma de distribuir una aplicación Java ? ¿Qué ocurre si la aplicación Java necesita instalar los artefactos en la computadora del usuario? ¿Hay buenos sistemas de instalación/empaque de Java por ahí?

En mi experiencia (de evaluating a number of options), 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 la ya mencionada Lauch4j). Pero usted solicitó el mejor forma, y para mi conocimiento actual install4j es el indicado, especialmente para la distribución de aplicaciones Java (EE) más grandes o más complicadas.

+0

¿Sabes cómo forzarlo a ejecutar JVM 5.0 en Mac OS? Con Windows, simplemente combina el JRE, pero en el mac es posible que tengan configurada otra JVM predeterminada. Así que no estoy seguro de cómo forzarlo explícitamente a usar la versión JVM específica que desee ... –

+0

@Stephane, en realidad no he creado instaladores de OS X usando install4j, pero creo que no debería ser un problema dado el opciones flexibles de agrupamiento/detección de JRE que tiene. Para obtener más información sobre ellos, consulte los enlaces en esta respuesta: http://stackoverflow.com/questions/995881/jar-installer-that-auto-detects-if-java-is-there-and-autostarts-the-application/ 995943 # 995943 – Jonik

+0

Desde Mac es compatible con la creación de paquetes de aplicaciones Java sólo se puede especificar el JRE en el info.plist así ... JVMVersion 1.5+ se puede quitar el plus para requerir una versión específica. Así es como lo hago, pero no uso install4j. Hay un montón de páginas que explican la creación de los presupuestos de la aplicación Mac en la web. También, recomiendo solo mirar cómo lo hacen limewire o vuze (aplicaciones java). También puede ver los scripts de compilación que utilizan para compilar los paquetes de aplicaciones y los archivos dmg, ya que son de código abierto. – Cal

Cuestiones relacionadas