2011-11-28 23 views
64

Por lo tanto, utilizaré Java Web Start para implementar la aplicación java. Al exportar a un Jar Runnable, hay tres opciones en eclipse Helios.¿Cuál es la diferencia entre las opciones de manejo de la biblioteca jar ejecutable?

  • Extracto de bibliotecas necesarias en el tarro
  • paquete bibliotecas necesarias en el tarro
  • Copiar bibliotecas necesarias en sub carpeta junto al frasco.

¿Cuáles son las diferencias y cómo afectarán a mi archivo .jnlp?

Si se trata de un solo contenedor, ¿no es más fácil porque no tendría que escribir todas las rutas diferentes a todas las bibliotecas que utiliza?

Si hay cambios tanto en la biblioteca como en la aplicación, ¿una sola jarría sería una mejor solución? ¿O necesitaría <jar href=''> para cada biblioteca individual?

También tenga en cuenta que necesito hacer uso de bibliotecas nativas como archivos .dll y .so.

Respuesta

115
  1. Extracto de bibliotecas necesarias en el tarro - Extrae los archivos .class reales de las bibliotecas de sus usos y aplicaciones pone esos .class archivos JAR dentro del ejecutable. Por lo tanto, el JAR ejecutable no solo contendrá los archivos .class de su aplicación, sino también los archivos .class de todas las bibliotecas que utiliza su aplicación.

  2. paquete bibliotecas necesarias en el tarro - Muestra la archivos JAR reales de las bibliotecas en su JAR ejecutable. Normalmente, JVM no puede cargar un archivo JAR dentro de un archivo JAR. Pero Eclipse agrega clases especiales al JAR ejecutable para que esto sea posible.

  3. Copiar bibliotecas necesarias en sub carpeta junto a JAR - Mantiene los archivos JAR de la biblioteca completamente separado del JAR ejecutable, por lo que el JAR ejecutable sólo contendrá los archivos .class de su aplicación.

Opción # 2 es conveniente, ya que los paquetes todo perfectamente en una sola JAR, y mantiene los archivos JAR de bibliotecas separadas de .class archivos de la aplicación.

Sin embargo, una desventaja de empaquetar todo dentro de un solo JAR (opciones # 1 y # 2) es que, si actualiza su aplicación, entonces el usuario tendrá que descargar más datos para actualizar la aplicación. Si los JAR se mantienen separados, el usuario solo tendrá que descargar el JAR que contiene el código de la aplicación, en lugar de un JAR único y masivo que contenga el código de su aplicación y, todo el código de la biblioteca.

+0

+1 Gracias, respuesta muy detallada. – KJW

+0

Curioso, ¿qué tal si creamos un contenedor que no se puede ejecutar? ¿Hay alguna diferencia? – KJW

+8

@KimJongWoo Puede "ejecutar" JAR ejecutables como este 'java -jar myjar.jar' porque el JAR define la ubicación de un método' main() 'en su archivo" META-INF/MANIFEST.MF ". La configuración "Main-Class" dentro de este archivo define la clase que tiene el método 'main()'. Los JAR "normales" tienden a no tener esta configuración, por lo que no puede "ejecutarlos" de la misma manera. – Michael

Cuestiones relacionadas