Entkernen der JRE mit einer Anwendung - was kann ich weglassen?

9

Ich habe JRE mit meiner App gebündelt, indem ich einfach die Dateien von $JAVA_HOME/jre in die Verteilung meiner App kopiert habe. Das mag zwar gegen den Geist von Java sein, aber es reduziert mögliche Probleme, indem sichergestellt wird, dass meine App auf einer JRE-Version ausgeführt wird, auf der sie getestet wurde (einschließlich der Bitness; ich verwende JNI, was erfordert, dass die JRE eine 32-Bit-Version ist) ).

Es funktioniert gut, aber die gesamte Distribution ist etwas groß, also könnten einige unnötige Dateien weggelassen werden? Tatsächlich enthält $JAVA_HOME/jre/README.txt den folgenden Hinweis:

  

Die Dateien, aus denen die Java SE Runtime Environment besteht, sind unterteilt in:   zwei Kategorien: erforderlich und optional. Optionale Dateien können ausgeschlossen werden   aus Redistributionen der Java SE Runtime Environment bei der   Verkäufer Ermessen.

     

Der folgende Abschnitt enthält eine Liste der Dateien und Verzeichnisse, die   kann optional bei Redistributionen mit der Java SE Runtime entfallen   Umgebung. Alle Dateien, die nicht in diesen Listen der optionalen Dateien enthalten sind, müssen   in Umverteilungen der Laufzeitumgebung enthalten.

     

... Bei der Neuverteilung der JRE unter Microsoft Windows als private   Anwendungslaufzeit (nicht für andere Anwendungen verfügbar)   Mit einem benutzerdefinierten Startprogramm sind auch die folgenden Dateien verfügbar   wahlweise. Dies sind Bibliotheken und ausführbare Dateien, die verwendet werden   für Java-Unterstützung in Browsern von Internet Explorer und Mozilla-Familie;   Diese Dateien werden in einer privaten JRE-Umverteilung nicht benötigt.

Was mich verwirrt ist, dass die Liste der optionalen Dateien unter anderem enthält:

%Vor%

Wie kann java/javaw.exe optional sein? Wie soll ich eine Java-Anwendung ohne sie starten? Offensichtlich weiß ich nichts (wahrscheinlich), oder die Anweisungen sind einfach falsch.

    
Joonas Pulakka 26.11.2010, 07:49
quelle

3 Antworten

2
  

Bei der Weitergabe der JRE unter Microsoft Windows als private Anwendungslaufzeit (auf die andere Anwendungen nicht zugreifen können) mit einem benutzerdefinierten Startprogramm sind die folgenden Dateien ebenfalls optional.

Wenn Sie die JVM in Ihre eigene Anwendung einbetten (indem Sie sie mit ihren gemeinsam genutzten Bibliotheken verknüpfen), benötigen Sie die eigenständigen Startprogramme nicht. Ich denke, Eclipse funktioniert zum Beispiel so.

Wenn Ihre App die ausführbare Java-Datei verwendet (zB über eine Batch-Datei), dann brauchen Sie diese natürlich.

    
Thilo 26.11.2010, 07:56
quelle
1

Dies bezieht sich zwar nicht ausschließlich auf die Frage, für die Optimierung von ganzen Programmen (oder ganzen Plattformen), "nicht benötigten Code" zu entfernen, habe ich ProGuard ein gutes Werkzeug zu sein. YMMV.

    
user166390 22.12.2010 07:43
quelle
0

Wie konvertiert man es mit einem Tool wie launch4j in eine ausführbare Datei? Ein paar weitere Vorschläge finden Sie hier (nicht in der angenommenen Antwort)

    
stacker 26.11.2010 08:06
quelle

Tags und Links