Wie kann ich das erstellen ausführbare JAR-Datei mit SWT, die auf allen Plattformen läuft?
SWT kommt mit einem Basis-GLAS und eine bestimmte JAR-pro-Plattform (Windows, Linux/32bit, Linux 64bit, Mac, AIX, ...). Wie erstelle ich eine ausführbare JAR-Datei, wählen Sie die richtige Plattform JAR zur Laufzeit?
[EDIT] ich dachte an alle Plattform-Gläser in einem Unterverzeichnis und in main()
würde, dann ändern Sie die class-loader. Hat das schon jemand versucht?
Warum nicht Sie verteilen mehrere ausführbare Dateien für jede Plattform (a la Eclipse)?
Da SWT nimmt nur einen kleinen Teil der app: Die ganze Sache ist derzeit 30MB. So kann ich Sie entweder bitten die Leute um download 32MB für jede Plattform oder herunterladen einer einzigen 40MB (für sechs Plattformen) - Datei, die läuft überall.
In den eclipse-Fall, haben wir 10+ downloads, jede >100MB und der einzige Unterschied zwischen Ihnen ist die SWT-jar. Entweder ich will einen download oder einen großen download und eine kleine pro download-Plattform, die wird automatisch heruntergeladen, wenn ich die app starte, das erste mal.
Was Sie beschreiben, ist mehr ein Problem für die Anbieter als für die Nutzer. Als Benutzer bevorzuge ich den download einer 32MB-exec. Aber ich habe verstanden, dass Sie nicht wollen, dies zu tun 🙂
Was ich will ist, um die Installation zu machen und mit weniger Schmerzen für den Benutzer. Ich will Ihnen eine einzige Datei, die auf einer unterstützten Plattform. Wenn Sie möchten, nehmen Sie die app zusammen mit dem nächsten computer/OS (beispielsweise eine 64-bit-Windows-oder die neue Linux-box), sollte es möglich sein, kopieren Sie einfach die app und mit ihm getan werden.
Da SWT nimmt nur einen kleinen Teil der app: Die ganze Sache ist derzeit 30MB. So kann ich Sie entweder bitten die Leute um download 32MB für jede Plattform oder herunterladen einer einzigen 40MB (für sechs Plattformen) - Datei, die läuft überall.
In den eclipse-Fall, haben wir 10+ downloads, jede >100MB und der einzige Unterschied zwischen Ihnen ist die SWT-jar. Entweder ich will einen download oder einen großen download und eine kleine pro download-Plattform, die wird automatisch heruntergeladen, wenn ich die app starte, das erste mal.
Was Sie beschreiben, ist mehr ein Problem für die Anbieter als für die Nutzer. Als Benutzer bevorzuge ich den download einer 32MB-exec. Aber ich habe verstanden, dass Sie nicht wollen, dies zu tun 🙂
Was ich will ist, um die Installation zu machen und mit weniger Schmerzen für den Benutzer. Ich will Ihnen eine einzige Datei, die auf einer unterstützten Plattform. Wenn Sie möchten, nehmen Sie die app zusammen mit dem nächsten computer/OS (beispielsweise eine 64-bit-Windows-oder die neue Linux-box), sollte es möglich sein, kopieren Sie einfach die app und mit ihm getan werden.
InformationsquelleAutor Aaron Digulla | 2010-01-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sich dies anschauen, da ist ein Codebeispiel:
Erstellen von cross-Plattform-java swt Anwendung
InformationsquelleAutor Matías
Für meinen aktuellen job, den ich brauchte, um zu liefern eine ausführbare jar-Datei, das laden kann Gläser in sich und führen Sie eine zweite main(). Im Grunde ein bootstrap-main() und eine Anwendung main().
Schritt 1. im manifest "main-Klasse" stellen Sie Ihre bootstrap-Klasse
Schritt 2. Wenn der bootstrap-Klasse läuft es unjar ' s seine eigenen jar und alle jars in ein temp-Verzeichnis. Verwenden Sie so etwas wie die Zeile unten, um Ihre eigenen jar.
Schritt 3. Der bootstrap-Klasse, erkennt das OS über die "os.name" - Eigenschaft und lädt die passenden Gläser aus dem temp-Verzeichnis mit dieser
Schritt 4. Jetzt sollten Sie in der Lage sein, um Ihre Anwendung auszuführen, die durch das aufrufen der Anwendung main().
HINWEIS: mit Diesem kleinen hack, hängt von Ihrer JVM mit
URLClassLoader
als seine SystemClassLoader, was wahr ist, für Sun JVMs, nicht sicher auf andere.Diese Weise können Sie liefern einen einzigen jar nur, und es entpackt sich selbst und führen Sie mit der richtigen Gläser.
newInstance(urls, parentClassLoader)
Methode, um wickeln Sie es und installieren Sie dann die neue classloader mitThread.currentThread().setContextClassLoader ()
.+1 Interessante Idee, den classpath in einer Haupt-und rufen Sie dann eine andere.
danke für den Tipp, ich werde versuchen, dass
InformationsquelleAutor karoberts
IIUC, Sie hätten immer noch das problem der Angabe der Plattform-spezifischen JNI-Bibliothek. Sie möglicherweise in der Lage zu nutzen Java Web Start für diese, aber ich habe nicht versucht. Alternativ können einige der Projekte, erstellen von benutzerdefinierten Installationsprogramme für alle unterstützten Plattformen. Zum Beispiel, Bereitstellen von SWT-Anwendungen auf Mac OS X beschreibt das erstellen eines SWT Mac application bundle. Der Ansatz ist in diesem Beispiel. Ich habe auch gesehen, das JarBundler Ant-Task verwendet.
Nachtrag: der Artikel Bereitstellung einer SWT-Anwendung auf Java-Webstart enthält einige nützliche Hinweise.
Ich kann sehen, dass der technische Reiz, aber ich sehe auch die Wartungs-Schwierigkeiten. Vor einem ähnlichen problem, ich habe einen link zu SO ein Artikel über die Zeugen Jehovas.
InformationsquelleAutor trashgod
Vielleicht http://one-jar.sourceforge.net/ (Maven-plugin an http://code.google.com/p/onejar-maven-plugin/) helfen könnte, in diese Richtung...
InformationsquelleAutor Marcel Stör
Wird es einfacher sein zu verwenden, verschiedene shell-Skripte für verschiedene Plattformen, und geben Sie Plattform-spezifische jar in das Skript.
InformationsquelleAutor Denis Tulskiy