Was ist der Unterschied zwischen den Handhabungsoptionen für ausführbare JAR-Bibliotheken?

77

Daher werde ich Java Web Start verwenden, um die Java-Anwendung bereitzustellen. Beim Exportieren in ein Runnable Jar gibt es in Eclipse Helios drei Optionen.

  • Extrahieren Sie die erforderlichen Bibliotheken in JAR
  • Paket benötigt Bibliotheken in JAR
  • Kopieren Sie die erforderlichen Bibliotheken in den Unterordner neben JAR.

Was sind Unterschiede und wie wirken sie sich auf meine .jnlp-Datei aus?

Wenn es sich um ein einzelnes Glas handelt, ist es nicht einfacher, weil ich nicht all die verschiedenen Pfade zu allen verwendeten Bibliotheken schreiben müsste?

Wenn sich sowohl in der Bibliothek als auch in der Anwendung Änderungen ergeben, wäre ein einzelnes Glas die bessere Lösung? Oder würde ich brauchen<jar href=''> für jede einzelne Bibliothek ?

Beachten Sie auch, dass ich native Bibliotheken wie DLL- und SO-Dateien verwenden muss.

KJW
quelle

Antworten:

141
  1. Erforderliche Bibliotheken in JAR extrahieren - Extrahiert die tatsächlichen .classDateien aus den von Ihrer App verwendeten Bibliotheken und legt diese .classDateien in der ausführbaren JAR ab. Die ausführbare JAR enthält also nicht nur die .classDateien Ihrer Anwendung, sondern auch die .classDateien aller Bibliotheken, die Ihre Anwendung verwendet.

  2. Erforderliche Bibliotheken in JAR packen - Fügt die tatsächlichen JAR-Dateien der Bibliotheken in Ihre ausführbare JAR ein. Normalerweise kann eine JAR-Datei innerhalb einer JAR-Datei nicht von der JVM geladen werden. Eclipse fügt der ausführbaren JAR jedoch spezielle Klassen hinzu, um dies zu ermöglichen.

  3. Kopieren der erforderlichen Bibliotheken in einen Unterordner neben JAR - Hält die Bibliotheks-JARs vollständig von der ausführbaren JAR getrennt, sodass die ausführbare JAR nur die .classDateien Ihrer Anwendung enthält.

Option 2 ist praktisch, da sie alles ordentlich in eine einzelne JAR packt und die Bibliotheks-JARs von den .classDateien Ihrer Anwendung getrennt hält .

Ein Nachteil beim Packen aller Elemente in eine einzelne JAR (Optionen 1 und 2) besteht jedoch darin, dass der Benutzer beim Aktualisieren Ihrer Anwendung mehr Daten herunterladen muss, um die Anwendung zu aktualisieren. Wenn die JARs getrennt gehalten werden, muss der Benutzer nur die JAR herunterladen, die Ihren Anwendungscode enthält, anstatt einer einzelnen, massiven JAR, die Ihren Anwendungscode und den gesamten Bibliothekscode enthält.

Michael
quelle
Neugierig, wie wäre es, wenn Sie nur ein Glas erstellen, das nicht ausgeführt werden kann? Gibt es einen Unterschied?
KJW
10
@KimJongWoo Sie können ausführbare JARs wie folgt "ausführen", java -jar myjar.jarda die JAR den Speicherort einer main()Methode in ihrer Datei "META-INF / MANIFEST.MF" definiert. Die Einstellung "Hauptklasse" in dieser Datei definiert die Klasse mit der main()Methode. "Normale" JARs haben diese Einstellung normalerweise nicht, daher können Sie sie nicht auf die gleiche Weise "ausführen".
Michael
1
@ Michael, Nun, für die Bereitstellung eigenständiger Anwendungen (kein Versionsupdate) wäre Option 1 nicht die offensichtliche Wahl? Es scheint auch die Lean-Nest-Lösung zu sein und kostet am wenigsten Bytes, nicht wahr?
Pacerier
1
Ist ein Glas mit Extrakt schneller als eine Packung? In Ladegeschwindigkeit und Ausführung
Developer66
1
@ Developer66 Ich würde vermuten, dass Leistungsunterschiede vernachlässigbar sind.
Michael