Cuando creamos imágenes en tiempo de ejecución jlink podemos usar etiquetas como '--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages', creando una carpeta de distribución alrededor de 45mb.

Si queremos usar javapackager, por ejemplo para crear un archivo .DMG, ¿cómo podemos hacer una compresión similar? ya que estas etiquetas no están disponibles para javapackager. Sin ellos, el paquete final es de alrededor de 100 MB, perdiendo mucho las ventajas de modularización de java9, por lo que mi pregunta es si es posible usar javapackager con imágenes de tiempo de ejecución de JRE creadas por jlink.

Gracias

5
Tiago Santos 14 nov. 2017 a las 16:45

2 respuestas

La mejor respuesta

Respondiendo a mi propia pregunta, podemos usar la combinación de dos:

Para el ejemplo de MacOSX:

1) genere un dist en tiempo de ejecución con jlink, esto creará una carpeta lib con alrededor de 50mb si usa etiquetas de compresión.

2) Genere MacOSX.app con javapackager, este .app vendrá con una carpeta lib en tiempo de ejecución de alrededor de 98mb.

3) Simplemente reemplácelos, haga clic derecho en MacOSX.app-> "mostrar contenido del paquete", luego vaya a Plugins / Java.runtime / Contenidos / Inicio / y reemplace la carpeta lib con la generada por jLink.

De esta manera, tiene una aplicación Java autónoma con alrededor de 50 MB en lugar de 100 MB, gracias a los hermosos módulos Java9.

Sería genial hacer todo esto solo con javapackager, si es posible no pude encontrar cómo, sugiero usar algo como gradle para ejecutar todo este proceso con 1 comando.

4
Tiago Santos 15 nov. 2017 a las 16:07

Puede pasar una opción al JDK 9 javapackager que se entrega al proceso jlink.

opción javapackager para controlar jlink

-BjlinkOptions=compress=2
or
-BjlinkOptions=strip-debug

No pude averiguar cómo pasar ambos al mismo tiempo.

-BjlinkOptions="compress=2 strip-debug"

Conducir a java.lang.IllegalArgumentException

-BjlinkOptions="strip-debug compress=2"

Tiene el mismo resultado que -BjlinkOptions=strip-debug

Cuando la opción -BjlinkOptions=... se pasa varias veces a javapackager, solo se tiene en cuenta la última.

Las opciones de jlink no-header-files y no-man-pages parecen no ser válidas aquí, ya que conducen a una NPE cuando se pasan después de -BjlinkOptions=.

4
SubOptimal 19 mar. 2018 a las 00:49