2016-07-15 30 views
4

Ist es möglich, eine JRE in einer exportierten eigenständigen Java-App zu bündeln? Wir haben eine sehr spezielle Anforderung, um eine Standalone AnyLogic Java App auf einem Rechner laufen zu lassen, auf dem die neueste Java Version nicht installiert ist. Aufgrund der IT Richtlinien des Unternehmens können wir dies nicht tunSo rufen Sie ein eingebettetes JRE über die Befehlszeile auf, um Java-Anwendungen auszuführen

Durch einige Nachforschungen habe ich einige gefunden Websites behaupten, dass sie es bereits für Windows und Mac getan haben.

Using a bundled JRE on OSX https://wiki.openjdk.java.net/display/MacOSXPort/How+to+embed+a+.jre+bundle+in+your+Mac+app http://www.intransitione.com/blog/take-java-to-app-store/

Mein Problem ist, dass die meisten dieser Beiträge zu Bündeln eine App für Mac OS x beziehen und erfordert, dass die JAR-Dateien in einer IDE wie Eclipse erstellt werden. Aber seit ich AnyLogic verwende, werden die JAR-Dateien exportiert, ohne dass ich eingreifen kann. Was ich brauche, ist die Befehlszeilencode zu ändern, die die JAR-Dateien läuft und sieht derzeit wie folgt aus:

java -Xdock:name="AnyLogic Model" -Dnativewindow.awt.nohidpi=true -cp com.anylogic.engine.jar:com.anylogic.engine.nl.jar:lib/database/querydsl/querydsl-sql-codegen-3.6.3.jar -Xmx256m model6.Simulation $* 

(Hinweis: Code zur besseren Lesbarkeit reduziert)

in etwas, das ich nehme an das jre passieren oder JVM soll als Argument für den Java-Aufruf verwendet werden. Oder setzen Sie das Verzeichnis, das für Java oder so etwas verwendet werden soll. Wenn Sie den Befehl java auf einem Rechner aufrufen, ohne dass Java installiert ist, wird nichts angezeigt.

Ich habe eine sehr einfache Anwendung, sowie JDK-Plugin, das ich von der Money App bekam, die eine Java-Anwendung, die mit einem eigenen integrierten jre auf OSx läuft, finden Sie hier

https://www.dropbox.com/sh/1bedimsb0lj403t/AADYR7iFoBD4YiqS_RGZ2xAVa?dl=0

Dank

Antwort

2

ein Kollege von mir, der nicht auf dem Stack Exchange gab mir die Antwort so hier geht, ist eigentlich ganz einfach:

um meine besonderen Umständen gerecht zu werden braucht man nur eine jre innerhalb der Wurzel enthalten den Ordner, den Sie einem Client zur Verfügung stellen und dann auf die ausführbare Java-Datei in der Ausführungsdatei verweisen. Die Lösung für Windows und Mac ist etwas anders, so hier geht:

Auf Mac

Sie die jre im folgenden Ordner finden. Es ist ein versteckter Ordner so, wenn Sie Mac ist keine Ordner gesetzt, um anzuzeigen hidded gehen Verwendung Befehl-Umschalt-g und gehen Sie zu

/Library/Java/JavaVirtualMachines/ 

sollte ein jdk Ordner und wechseln Sie dann zu

jdk1.8.0_45.jdk/Contents/Home/jre 
Finder

auf Windows

die Lage des jre ist in

c:\Program Files\Java\ 

können Sie den Speicherort in der .bat-Datei, die AnyLogic automatisch in Zeile Code erzeugt, der wie folgt aussieht:

@SET PATH_XJAL="%DISK_XJAL%\Program Files\Java\jre6\bin\java.exe" 

Sobald Sie die jre Kopie diese Ordner auf den gleichen Ort wie die Stand-alone-Java-Anwendung haben .Dann ist die einzige Sache, die bleibt, ist die referenzierte Position sowohl in Mac Befehlszeile ausführbare Datei und die Datei windows.bat

Auf Mac von

ändern

java -Xdock:name="AnyLogic Model" 

zu

./jre/bin/java -Xdock:name="AnyLogic Model" 
zu ändern

Auf Windows

Wechsel von

@SET PATH_XJAL="%DISK_XJAL%\Program Files\Java\jre6\bin\java.exe" 

zu

@SET PATH_XJAL= \jre6\bin\java.exe" 

den Java-App jetzt aus der Java-Version auf der Maschine unabhängig auf Mac und Windows mit oder ob es installiert ist oder nicht

+0

danke, Jaco. Nur um zu verdeutlichen: Sie müssen die JRE noch manuell auf die Maschine Ihres Kunden kopieren, richtig? – Benjamin

+0

Sie fügen die JRE einfach in einen Ordner innerhalb der normalen Gruppe von Dateien ein, die Sie dem Client zur Verfügung stellen würden. In meinem Code, in dem ich den Pfad ändere, wird davon ausgegangen, dass Sie die gewünschte Java-Version in die Stammordner-Struktur kopiert haben. Auf diese Weise können Sie auf den Pfad zu '\ jre \ bin \ java verweisen. unter Windows und './jre/bin/java' auf Mac. Ich habe den ersten Abschnitt in meiner Antwort für mehr Klarheit bearbeitet –

0

Eine weitere Alternative besteht darin, Ihre kompilierte Anwendung unter Verwendung von Exe4J in eine ausführbare Datei zu kompilieren. Es ist nicht kostenlos, aber ein weiterer Vorteil ist, dass Sie Ihrem Client nur eine einzige exe-Datei senden, nicht eine Reihe von Dateien. (Disclaimer: noch nicht mit der internen AL7-dbase versucht, aber es funktioniert gut beim Zugriff auf externe Daten).

+1

Eine freie Alternative - die ich nicht verwendet habe, aber von einigen anderen Entwicklern vorgeschlagen wurde - [Launch4j] (http://launch4j.sourceforge.net/) –