2010-01-09 16 views
8

Por más que lo intente, no puedo ejecutar un archivo JNLP localmente (haciendo doble clic). Parece ser una cuestión de localizar un archivo jar, incluso cuando lo especifico en relación con el archivo jnlp. Me sale el siguiente error:¿Alternativa local al archivo JNLP?

The field <jar>href has an invalid value: helloworld.jar

Esto ocurre incluso cuando el archivo JNLP está en la misma carpeta que HolaATodos.jar. Realicé búsquedas y este es un problema consistente especialmente para las personas que desean empaquetar una aplicación en un CD y usar JNLP. La única "solución" proporcionada por Sun es la capacidad de especificar la base de código a través de la línea de comando, pero eso realmente no ayuda mucho. No entiendo por qué no suponen o no permiten que la base de código sea "." o "archivo: //". - Intenté este tipo de cosas en el parámetro de la base de código de la etiqueta jnlp (dentro del archivo) y nada funcionó.


es extremadamente conveniente para mí utilizar un archivo JNLP porque no tiene que preocuparse por detección de la plataforma, bibliotecas nativas, o incluso los principales archivos jar JOGL; Me basta con incluir esta línea y todo está hecho para mí:

<extension name="JOGL" href="http://download.java.net/media/jogl/builds/archive/jsr-231-2.0-beta10/webstart/jogl-all-awt.jnlp" /> 

estoy esperando encontrar algo que puede hacer el mismo tipo de cosas. Si no, puedo agarrar manualmente (o con Ant) los archivos jar JOGL, no es un gran problema; solo una de esas cosas que JNLP hace por mí y que realmente voy a extrañar.


¿Cuál es la mejor alternativa a los archivos JNLP, para mí utilizar localmente (es decir, haga doble clic para ejecutar)? ¿Hay algo tan elegante o solo necesito escribir un script de shell para Linux, un archivo de proceso por lotes para Windows, y que Ant detecte y descargue los archivos JOGL apropiados?

+0

Si alguien más tiene una mejor respuesta que las siguientes, ¡por favor hable! Todavía me encantaría saber si es posible ejecutar archivos JNLP desde el sistema de archivos local. Sin embargo, después de algunas investigaciones, he decidido que es imposible y desde entonces he ido con mi propia sugerencia; un par de scripts (run.bat y run.sh), y mi script Ant usa etiquetas de condición y descarga y desempaqueta el JOGL jar correcto. En breve enviaré una respuesta que contiene el código Ant. – Ricket

Respuesta

19

I ' he usado a.archivo jnlp como este para poner en marcha el software de Java Web Start localmente

  1. especifique la base de código de este modo: <jnlp spec="1.0+" codebase="file://localhost/X:/path/to/jnlp/" href="software.jnlp">

  2. recursos de lista con las rutas relativas: <resources> <jar href="lib/software.jar" main="true" /> <jar href="lib/softwareLibrary.jar" main="true" /> ... </resources>

  3. y finalmente diga Web Start, donde puede encontrar el punto de entrada del software dentro del contenedor marcado con main="true": <application-desc main-class="com.example.Main" />

Lo único que debe cambiar cuando se despliega de forma remota es el parámetro de la base de código.

+0

¿Y esto no requiere algún tipo de servidor web o servidor de archivos ejecutándose en localhost para analizar esa ruta? – Ricket

+0

No, pero la parte localhost todavía se requiere. No funciona sin eso, funciona si lo pones. Me tomó medio día darme cuenta :-) –

+0

Eso es realmente genial. Ojalá estuvieras en enero cuando estaba jugando con esto. Como esta es la respuesta que estaba buscando, le cambio la respuesta aceptada. :) – Ricket

1

Use un manifiesto para su jar. Allí puede definir la clase principal para iniciar y las bibliotecas requeridas. Vea los argumentos de clase principal y ruta de clase en la especificación de manifiesto.

+0

El objetivo de esto es permitirme simplemente hacer doble clic en el archivo jar para ejecutarlo, ¿correcto? – Ricket

+0

Sí. Ver también: http://java.sun.com/javase/6/docs/technotes/guides/jar/index.html – trashgod

+1

No creo que Manifest.MF permita especificar la ubicación de las bibliotecas nativas. –

0

Como sugiere dhiller, agregar un manifiesto a su JAR permite a los usuarios ejecutar desde una copia física sin acceso a la red. Además, en lugar de proporcionar un .jnlp que apunta a un JAR local, incluya un .jnlp que enlace a su sitio web. Eso permitirá a los usuarios ejecutar la versión más reciente y mejor de su programa e instalar fácilmente un acceso directo para futuras referencias.

2

El sistema JNLP fue mejorado con Java 6 Update 10 (un tiempo) pero aún así es muy difícil de depuración (que permite el seguimiento completo en la consola de Java, y recorrer el código fuente javaws.

En su situación Me gustaría hacer un esfuerzo adicional y ponerlo a trabajar. ¿Tal vez proporcionaría un archivo JNLP completo que muestre el problema?

0

JNLP está diseñado para el inicio de red (específicamente http (s)) y sin una red la implementación de Java debe ser realmente confuso. Incluso proyectos maduros como Eclipse Stick con la opción .sh, .bat.

+0

No necesariamente ... NetBeans tiene una opción de lanzamiento JNLP local lista para usar. Además, si miras el comentario de @ Shrike, puedes ver que el departamento local no es tan difícil. –

4

Simplemente elimine los atributos codebase y href de jnlp etiqueta.

<jnlp spec="1.0+"> 

Esto es compatible desde java 1.6u18.