2010-07-31 16 views
8

Tengo una aplicación JNLP en funcionamiento que necesito distribuir a varios usuarios finales no técnicos.¿Combinación de Launch4J y Java Web Start?

Si la máquina del usuario tiene una JVM reciente instalada, todo está bien. Simplemente hacen doble clic en el archivo JNLP que les envío y Java Web Start hace el resto.

Ahora me gustaría distribuir algo que funcione con o sin una JVM, p. Ej. un archivo .exe que descarga automáticamente una JVM compatible si no está presente, luego invoca javaws.exe para descargar los archivos .jar y ejecutar la aplicación.

Launch4J es la coincidencia más cercana que he encontrado, pero no puede iniciar un programa a través de javaws.exe. Las únicas opciones son java y javaw

Me gustaría tener un producto que puede:

  • Generar un archivo autónomo .exe que no requiere una JVM que ser pre-instalado
  • analizar el archivo .jnlp y determine la JVM correcta para descargar si es necesario (sé que Java Web Start puede descargar una JVM si es necesario, pero quiero evitar tener que descargar dos, la primera para arrancar Java Web Start y la segunda para ejecutar la aplicación que puede requerir una JVM específica pero diferente.)
  • Descargue e instale la JVM automáticamente, no, simplemente dirija al usuario a una página de descarga de Java o abra un nuevo asistente de instalación.
  • Solicitar una contraseña de administrador si es necesario (para los permisos para instalar la JVM. Yo no creo que esto está incorporado en los programas de instalación de Sun JVM.)
  • Mostrar sólo un diálogo de seguridad (me gustaría pedir al usuario simplemente una vez, para confirmar que confían en el .exe generado, pero no quiero un segundo aviso para confirmar que confían en el archivo .jar que será de la misma fuente y firmado con el mismo certificado.) Supongo que esto requerirá el descargador automático para instale el certificado antes de iniciar JWS.)
  • (no esencial) Descargue los recursos de la aplicación (por ejemplo, .jar archivos) en el fondo simultáneamente con la JVM. Esto requeriría que la memoria caché se ejecute antes de que se instale la JVM, por lo que la memoria caché debería implementarse en código nativo y el DownloadService interactuaría más tarde con JNI.

¿Existe un producto como este? Sospecho que no, pero vale la pena intentarlo.


actualizaciónthis article he encontrado que tiene soluciones a algunos problemas relacionados, a pesar de que está diseñado para su instalación en línea y yo soy refiere principalmente a la instalación en línea.

Respuesta

2

Me he encontrado con el mismo problema. Terminé con un BAT, un Shell y finalmente un DMG para Mac.

me encontré con este comentario sobre la instalación de JRE automaded para Windows usando el instalador Nullsoft:

http://nsis.sourceforge.net/Java_Launcher_with_automatic_JRE_installation

creo JNLP Se encuentra fuera difícil conseguir la automatización para todas las plataformas. Sin embargo, en mi proyecto, hasta hace dos años, no he visto quejas acerca de que los usuarios tengan que obtener Java por sí mismos. Creo que la mayoría de las máquinas ya lo tendrán. El usuario de Windows se quejó de no tener un acceso directo, pero eso es fácil de hacer usando vbs.

también en el Mac DMG AppBundle, es su forma de especificar el JRE. Mac tendrá la última versión, a menos que sean máquinas antiguas basadas en PowerPC. En ese caso, no Java6.

De usted termina con varios lanzadores, yo recomendaría una estrategia de actualización automática.

+0

No estoy tan preocupado por plataformas que no sean Windows. Los Mac siempre tienen una JVM instalada, y supongo que la mayoría de los usuarios de Linux tienen los conocimientos técnicos para encontrar y hacer doble clic en el archivo '.jar' si es necesario. – finnw

0

Otro enfoque podría ser distribuir un Sun JRE con un archivo .BAT invocándolo con el modificador/S, que provoca una instalación silenciosa.

No he visto nada más que permita una instalación completamente silenciosa de Java combinada con la invocación de javaws.

0

Ok, entiendo lo que intentas hacer, pero ¿por qué no quieres usar javaws? Launch4J parece una buena opción como alternativa a tener instalado java, ya que permitirá el uso sin interrupciones del archivo jar.

javaws es usos más o menos JAVA.EXE con permisos de seguridad y algunas opciones de lanzamiento. Pero los permisos de seguridad se pueden deshabilitar si usa un certificado en el que el usuario confía.

También no estoy seguro de cuándo se introdujo javaws, pero estoy seguro de que estaba disponible en Java 1.5 que estoy cerca de EOL. Entonces, a menos que su usuario no haya tenido una Java instalada por muchos años, dudo que hacer que lancen jnlp sería un problema. Incluso si están ejecutando una versión anterior, puede agregar una versión requerida de java a jnlp y esto se descargará automáticamente solo para esa aplicación.

+0

I * do * quiero usar javaws. El caso problemático es una PC que nunca ha tenido Java instalado. – finnw

+0

javaws solo funciona si Java ya está instalado. –

2

También puede considerar compilar su proyecto con Excelsior JET. Además de todo lo demás, también crea una distribución autosuficiente de tamaño razonable.

3

He podido hacer esto & utilízalo en producción.

escribir una clase de arranque simple, JAR, y Launch4j el frasco.

aquí es el principal para la clase de arranque simple:

public static void main(String[] args) { 
    try {  
    final File jnlp = File.createTempFile("temp", ".jnlp"); 
    final URL url = new URL("http://yourjnlp-wherever-youre-hostingit.jnlp"); 
    yourCopyStreamMethodYouWrote(url.openStream(),new FileOutputStream(jnlp)); 
    Desktop.getDesktop().open(jnlp); 
    } catch (final Throwable t) { 
    // do something useful here 
    } 
} 
+0

Suena como la forma correcta de hacerlo. launch4j asegura que hay presente una JVM (no sé si puede instalarla automáticamente o llevar una con ella) e invoca el código. El código simplemente le dice a un navegador que inicie el script JNLP. –

+0

Esto es inteligente, pero ¿no tienes dos pantallas molestas (problemas de seguridad, "quieres ejecutar") tanto para esta clase como para tu aplicación Java Web Start? – Joel

0

Aunque no es gratuito para uso no comercial, Install4j ofrece un sistema de instalación nativo para aplicaciones Java. La agrupación de JRE es compatible. No estoy seguro de que pueda analizar JNLP automáticamente, pero puede que sea algo que valga la pena verificar.

Como caso de uso de muestra, el Integrated Genome Browser basado en Java se distribuye con un instalador generado por esta herramienta. Vea su install4j configuration file.

Cuestiones relacionadas