2011-11-28 8 views
64

Quindi userò Java Web Start per distribuire l'applicazione java. Quando esporti in un Jar Runnable, ci sono tre opzioni in eclissi Helios.Qual è la differenza tra le opzioni di gestione della libreria jar eseguibili?

  • Estratto librerie richieste in JAR
  • confezione librerie richieste in JAR
  • Copia librerie richieste nella sub cartella accanto alla JAR.

Quali sono le differenze e in che modo influiscono sul mio file .jnlp?

Se è un singolo barattolo, non è più semplice perché non dovrei scrivere tutti i percorsi diversi per tutte le librerie che usa?

Se ci sono cambiamenti nella libreria e nell'applicazione, un singolo barattolo sarebbe una soluzione migliore? O avrei bisogno di <jar href=''> per ogni singola biblioteca?

Nota anche che ho bisogno di fare uso di librerie native come i file .dll e .so.

risposta

115
  1. estratto librerie richieste in JAR - Estrae i file effettivi .class dalle librerie vostri usi app e mette questi file .class all'interno del JAR eseguibile. Pertanto, il JAR eseguibile conterrà non solo i file .class dell'applicazione, ma anche i file .class di tutte le librerie utilizzate dall'applicazione.

  2. confezione librerie richieste in JAR - mette le effettive file JAR delle librerie nel vostro JAR eseguibile. Normalmente, un JAR file all'interno di un file JAR non può essere caricato dalla JVM. Ma Eclipse aggiunge classi speciali al JAR eseguibile per renderlo possibile.

  3. Copia librerie richieste nella sottocartella accanto al barattolo - Mantiene i JAR biblioteca completamente separati dalla JAR eseguibile, in modo che il JAR eseguibile conterrà solo i file .class della vostra applicazione.

opzione # 2 è conveniente perché i pacchetti tutto ordinatamente in un'unica JAR, e mantiene i JAR biblioteca separati dai file della vostra applicazione .class.

Tuttavia, uno svantaggio per imballare tutto all'interno di un singolo JAR (opzioni 1 e 2) è che, se si aggiorna l'applicazione, l'utente dovrà scaricare più dati per aggiornare l'applicazione. Se i JAR vengono mantenuti separati, l'utente dovrà solo scaricare il JAR contenente il codice dell'applicazione, invece di un singolo JAR massiccio contenente il codice dell'applicazione e tutto il codice della libreria.

+0

+1 Grazie, risposta molto dettagliata. – KJW

+0

Curioso, che dire solo creando un barattolo che non è eseguibile? c'è qualche differenza? – KJW

+8

@KimJongWoo Puoi "eseguire" JAR eseguibili come questo 'java -jar myjar.jar' perché il JAR definisce la posizione di un metodo' main() 'nel suo file" META-INF/MANIFEST.MF ". L'impostazione "Main-Class" all'interno di questo file definisce la classe che ha il metodo 'main()'. I JAR "normali" tendono a non avere questa impostazione, quindi non è possibile "eseguirli" nello stesso modo. – Michael