5 votos

En macOS, ¿cómo ejecutar un archivo JNLP con OpenJDK 8?

Debido a la nueva licencia de OracleJDK8, tengo que usar OpenJDK8. He instalado AdoptOpenJDK8 desde Homebrew y funciona bien.

El problema es que tengo que ejecutar una aplicación de Java desde un enlace JNLP, lo que se llama Java Web start. El problema es que esta característica no está incluida en el OpenJDK8.

Java Web Start está implementado en el proyecto IcedTea-Web pero no puedo encontrar ningún binario para macOS y cuando intento compilarlo, obtengo el mensaje:

configure: error: "OS darwin18.2.0 is not supported"

Mi pregunta es: ¿Cómo puedo ejecutar un archivo JNLP con OpenJDK 8? ¿Necesito usar IcedTea-Web y si es así cómo puedo construirlo?

0 votos

Java WebStart no fue liberado como código abierto, por lo que no pudo incluirse directamente en otras distribuciones de Java que no fueran de Oracle. Ahora ha sido desaprobado y eliminado a partir de Java 11, por lo que si esta es una aplicación que necesita ejecutarse en versiones futuras de Java, se debe usar otro mecanismo de distribución.

10voto

Muhammet Can Puntos 131

IcedTea-Web es un proyecto que:

proporciona un plugin de navegador web de Software Libre que ejecuta applets escritos en el lenguaje de programación Java y una implementación de Java Web Start, originalmente basado en el proyecto NetX.

pero no hay una compilación para macOS. Sin embargo, la parte importante de esta aplicación está escrita en Java, por lo que podemos ejecutarla directamente en macOS. Así es como:

Obtén la compilación de Debian desde la versión estable:

wget http://ftp.us.debian.org/debian/pool/main/i/icedtea-web/icedtea-netx-common_1.6.2-3.1_all.deb

Extrae el archivo deb:

tar xzvf icedtea-netx-common_1.6.2-3.1_all.deb

Extrae el archivo data.tar.xz que está dentro del archivo deb:

tar xzvf data.tar.xz

Ve al directorio donde se encuentra el archivo jar principal:

cd usr/share/icedtea-web/

y simplemente ejecuta tu archivo jnlp:

java -cp netx.jar net.sourceforge.jnlp.runtime.Boot -Xnofork -jnlp my_application.jnlp

Dependiendo de tu aplicación, es posible que tengas que cambiar las opciones. Puedes enumerarlas con:

java -cp netx.jar net.sourceforge.jnlp.runtime.Boot

lo que resulta en:

SINOPSIS
    javaws [-run-options] archivo jnlp
    javaws [-control-options]

OPCIONES
    Al especificar opciones, el nombre del archivo jnlp puede ir después del comando, la opción -jnlp, una opción sin argumentos, o después de un argumento con una opción que toma un argumento. Se puede especificar un archivo html que lanza un jnlp después de la opción -html.
    El archivo jnlp puede ser una url o una ruta local.
    El archivo JNLP solo debe especificarse una vez, ya sea como argumento principal, después de -jnlp o a través de un archivo html.
    Opciones de control:
    -about               - Muestra una aplicación de ejemplo. (No se espera ningún argumento)
    -help                - Imprime información sobre los comandos admitidos y el uso básico. (No se espera ningún argumento)
    -license             - Muestra la licencia GPL y sale. (No se espera ningún argumento)
    -viewer              - Muestra el visor de certificados de confianza. (No se espera ningún argumento)
    -Xclearcache         - Limpia la caché de la aplicación JNLP. (No se espera ningún argumento)
    Opciones de ejecución:
    -allowredirect       - Sigue las redirecciones HTTP. (No se espera ningún argumento)
    -arg arg             - Agrega un argumento de aplicación antes del lanzamiento. (Se esperan uno o más argumentos)
    -headless            - Desactiva la ventana de descarga y otras interfaces de usuario. (No se espera ningún argumento)
    -html                - Ubicación del archivo HTML para iniciar (url o archivo). Puedes usar el parámetro ALL o números (como 1 2 5) para seleccionar applets en la página. Sin embargo, de forma experimental, este cambio debería mantenerlo seguro. (Se esperan uno o más argumentos)
    -jnlp                - Ubicación del archivo JNLP para iniciar (url o archivo). (Se espera exactamente un argumento)
    -nosecurity          - Desactiva el entorno de tiempo de ejecución seguro. (No se espera ningún argumento)
    -noupdate            - Desactiva la comprobación de actualizaciones. (No se espera ningún argumento)
    -param nombre=valor  - Agrega un parámetro de applet antes del lanzamiento. (Se esperan uno o más argumentos)
    -property nombre=valor - Establece una propiedad del sistema antes del lanzamiento. (Se esperan uno o más argumentos)
    -strict              - Habilita la comprobación estricta del formato del archivo JNLP. (No se espera ningún argumento)
    -update segundos     - Comprueba si hay actualizaciones. (Se espera exactamente un argumento)
    -verbose             - Habilita la salida detallada. (No se espera ningún argumento)
    -version             - Imprime la versión de IcedTea-Web y sale. (No se espera ningún argumento)
    -Xignoreheaders      - Omite la verificación de encabezados del tarro. (No se espera ningún argumento)
    -xml                 - Utiliza un analizador XML estricto para analizar el archivo JNLP. (No se espera ningún argumento)
    -Xnofork             - No crea otro JVM. (No se espera ningún argumento)
    -Xoffline            - Impide la conexión a red de ITW. Solo se usará la caché. La aplicación aún puede conectarse. (No se espera ningún argumento)
    -Xtrustnone          - En lugar de preguntar al usuario, predecirá todas las respuestas como no. (No se espera ningún argumento)

Actualización

En el futuro, deberías poder usar Open Web Start, que es una reimplementación de código abierto de la tecnología Java Web Start. Pero por ahora la instalación en macOS no está lista. Consulta el issue de GitHub correspondiente para más detalles.

1 votos

¡Buena sugerencia, +1! Solo recibo unas cuantas cientos de excepciones típicas de Java, pero creo que es normal. Estoy intentando ejecutarlo en Windows y aunque es Java y debería poder ejecutarse en cualquier plataforma que tenga un JRE...

0 votos

Java.net.URISyntaxException: Carácter no válido en la autoridad en el índice 7: file://C:\Users\\.config\icedtea-web\security\java.p‌​olicy at java.base/java.net.URI$Parser.fail(URI.java:2915) at java.base/java.net.URI$Parser.parseAuthority(URI.java:3249) ...

2 votos

Tenga en cuenta que esto es una ingeniería inversa de mejor esfuerzo de la implementación de Oracle sin compartir ninguna fuente. Esto significa que se comportará ligeramente diferente. Sin embargo, es importante que necesitamos una buena implementación del lanzador.

2voto

rogerdpack Puntos 211

Al parecer, una opción reciente para ejecutar archivos .jnlp con Corretto (o OpenJDK) es descargar la opción "portable" de IcedTea-Web, luego descomprimirlo, y dentro hay un archivo bin/javaws.sh.

Abre una consola, ve al directorio bin, luego puedes ejecutar el archivo .sh (o .bat para Windows).

bin $ ./javaws.sh /ruta/completa/hacia/archivo.descargado.jnlp

Si obtienes

advertencia, usando itw portable desde /Usuarios/packrd/Descargas/188/icedtea-web-image: -Xbootclasspath/a:/Usuarios/packrd/Descargas/188/icedtea-web-image/compartir/icedtea-web/javaws.jar:/Usuarios/packrd/Descargas/188/icedtea-web-image/compartir/icedtea-web/plugin.jar:/Usuarios/packrd/Descargas/188/icedtea-web-image/compartir/icedtea-web/jsobject.jar:/Usuarios/packrd/Descargas/188/icedtea-web-image/linux-deps-runtime/tagsoup.jar:/Usuarios/packrd/Descargas/188/icedtea-web-image/linux-deps-runtime/js.jar /Usuarios/packrd/Descargas/188/icedtea-web-image/bin/javaws.sh /Usuarios/packrd/Descargas/188/icedtea-web-image/compartir/icedtea-web/javaws_splash.png
./javaws.sh: línea 101: [: : se esperaba una expresión entera
./javaws.sh: línea 104: [: : se esperaba una expresión entera
./javaws.sh: línea 200: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre/bin/java: No such file or directory
./javaws.sh: línea 200: exec: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre/bin/java: no se puede ejecutar: No such file or directory

Esto significa "establece tu variable de entorno JAVA_HOME"

1 votos

En caso de que tengas varios JDKs, puedes usar el siguiente comando para ejecutar tu jnlp: export JAVA_HOME="/tu/ruta/java/8/home"; ./javaws.sh /ruta/completa/al/archivo.descargado.jnlp Con esto, solo funcionará para tu sesión actual de terminal y no interferirá con tu versión actual de JDK (por ejemplo, Java 17 o 22)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X