2009-01-13 4 views
46

Wie viele Java-Quellcode-Dateien kann ich in eine oder mehrere JavaScript-Dateien kompilieren, die mit handgefertigtem JavaScript verwendet werden können?Wie kompiliert Java-Quellcode zu JavaScript?

GWT ist eine Option, aber jedes Beispiel, das ich bisher gesehen habe, zielt auf den Aufbau von ausgefallenen Websites ab. Der einfache Anwendungsfall des Konvertierens von Java-Quellcode in JavaScript, das zusammen mit handgefertigtem JavaScript hasn't been well-documented verwendet werden kann.

Ich begann eine thread on the GWT mailing list zu diesem Thema, aber die Meinungen scheinen gemischt zu sein, ob dies überhaupt möglich ist.

Eine Person gab einen sehr nützlichen Tipp, der GWT-Exporter auschecken sollte. Das Problem ist, dass weder Quellcode noch Dokumentation verfügbar sind, obwohl es und this gibt.

edit: GWT-Exporter Quellcode ist here

ich auch Java2Script gesehen habe. Aber auch hier konnte ich keine Beispiele finden, wie ich meinen einfachen Anwendungsfall lösen könnte.

Was ist der beste Ansatz für dieses Problem? Gibt es etwas besseres, das mir fehlt?

+0

Diese Frage behandelt ein sehr ähnliches Thema: Kompilieren von Java-Bibliotheken zu JavaScript mithilfe von GWT. http://stackoverflow.com/questions/3125556/gwt-to-create-utility-javascript-library –

+1

Sehr gründliche Frage. Du hast einen tollen Job gemacht und ausgedrückt, was du bereits erforscht hast. Schön gemacht. – Spina

+0

Sie können versuchen, Scala-js https://github.com/lampepfl/scala-js für Ihr Java-Projekt zu verwenden - Java/Scala Interoperabilität http://www.scala-lang.org/old/faq/4) –

Antwort

9

Wenn Sie GWT verwenden, konvertieren Sie im Grunde den UI-Teil in Javascript (und davon ausgehend, dass Sie die UI-Widgets verwenden, die beim Schreiben von Java bereitgestellt werden). Nur einige Java-Bibliotheken sind in Javascript verfügbar. Gewöhnlich läuft in einer GWT-Anwendung alles, was Java-Bibliotheken stark beansprucht, auf der Serverseite und verbindet sich mit dem Javascript als AJAX (welches GWT für Sie handhabt). Daher konvertiert GWT Ihre vollständige Anwendung nicht unbedingt in Javascript (obwohl dies möglich ist, wenn Sie die Verwendung von Java-Bibliotheken und einige Funktionen einschränken möchten).

Auf jeden Fall, wenn dieser Ansatz (Aufruf von Java auf einem Server von innerhalb von Javascript aufruft) Ihnen gefällt, ist eine nette Option DWR, die grundsätzlich ermöglicht Javascript direkt Methoden in Java-Klassen auf dem Server aufrufen aufrufen (ohne dass Sie einen Web Service oder ein anderes Frontend erstellen müssen). Nicht was du gefragt hast, ich weiß.

Relevanter sieht es so aus, als gäbe es Quellcode für eine sample app demonstrating the use of gwt-exporter.

+0

Dies wäre für eine ziemlich kleine, nicht-gui-Java-Bibliothek. Ich hatte DWR nicht gesehen, was für größere Projekte sehr nützlich sein könnte. Ich habe nicht einmal das Quellverzeichnis für das Projekt gwt-exporteur angezeigt - danke, dass Sie darauf hingewiesen haben. Das sieht vielversprechend aus. –

+2

gwt-exporter link ist tot –

+0

Hier ist ein neuer Link zur Beispiel-App: http://code.google.com/p/gwt-exporter/source/browse/trunk/samples/src/main/java/exporterdemo/public /ExporterDemo.html –

1

eine Reihe von Java-Quellcode-Dateien gegeben, wie kann ich kompilieren sie in eine oder mehrere JavaScript-Dateien, die mit handgefertigten JavaScript verwendet werden können?

Es gibt keine direkte Korrelation zwischen den integrierten Java API- und Java-Sprachfeatures und denen von JavaScript. Daher wird jeder Versuch, einen "Konverter" zu erstellen, unvollständig sein. Als grundlegendes Beispiel haben Java-Klassen kein direktes korrespondierendes JavaScript-Idiom.

Ob ein unvollständiges Konvertierungstool für Ihren Anwendungsfall funktioniert, ist ohne den Quellcode nicht möglich.


Wie gesagt, mein Vorschlag, Ihr Problem zu lösen, zum ersten Versuch wäre GWT zu verwenden: ein Demo-Projekt, fallen in der Quelle Ihrer Bibliothek und nennen es von der JavaScript-Seite und sehen, was GWT Ausgänge einrichten in seiner .js-Datei. Einige der anderen Werkzeuge, die von anderen Postern hier vorgeschlagen werden, sind definitiv einen Besuch wert.

Wenn das fruchtbar ist und Sie Teil des Weges, groß.

Von dort müssen/wollen Sie den Rest der Konvertierung von Hand machen. Wenn man davon ausgeht, dass der Code tatsächlich korrekt funktioniert, wäre eine manuelle Überprüfung in jedem Fall angebracht. Einige Komponententests, die mit ihr konvertiert werden, wären ebenfalls ideal.

Sie geben nicht an, wie groß die Quelle Ihres Projekts ist, aber wenn es klein ist (sagen wir weniger als tausend Zeilen Code), sollte selbst eine vollständige Konvertierung von Hand nicht extrem schwierig sein. Wenn es viel größer als das ist, würde ich vorschlagen, zu überprüfen, ob Sie das tatsächlich als JavaScript-Code sowieso wollen.

3

Hier sind zwei weitere Optionen, Dinge zu sehen und eine dritte Option, die nicht konvertieren, nur zusammen leben.

  1. Java2Javascript

ich gefehlt haben, dies aus, um zu versuchen - Sieht näher zu dem, was gefragt worden. Unter Angabe die Webseite:..

eine Eclipse-Java zu JavaScript-Compiler-Plugin und eine Implementierung von JavaScript-Version von Eclipse Standard Widget Toolkit (SWT) mit anderen üblichen Dienstprogramme wie java.lang * und java.util * . Sie können Ihre SWT-basierte Rich-Client-Plattform (RCP) mithilfe von Java2Script Pacemaker in Rich Internet Application (RIA) konvertieren.

A beschränkt Java in Javascript Erfahrung - Sie zu portieren Ihre notwendigen Abhängigkeiten bräuchten oder Alternativen über Tools wie jQuery, etc. finden

  1. DukeScript

Während ich DukeScript anschaue, kompiliert es einige Front-End-Javascript und ruft Java hinter, aus dem Javascript des Browsers. Es scheint mehr oder weniger ein Hybrid-Ansatz, so dass Sie die Java Fülle von Bibliotheken aus Javascript verwenden können. Ich werde eine Browser-Sicherheitsrichtlinie für Java treffen.

Ein vollständiger JavaScript-Java-Erfahrung mit der Java-Laufzeit. Wenn ich das außerhalb der Browserumgebung wollte, würde ich Javascript auf Java verwenden.

  1. Nashhorn

das Betrachten wir als Beispiel für Javascript Java Ressourcen als Grundlage verwenden: Nashorn and JavaFX, als ein Beispiel für ein reiches Javascript betrieben Client. Wie auch immer, mit einer Javascript-Engine innerhalb von Java müssen Sie nicht so sehr zwischen einer Javascript-VM in einen Objekt-Code zu einer Java-VM übersetzen.

+0

Ihre Ansicht von DukeScript ist nicht ganz korrekt. Sie können auch DukeScript-Anwendungen in einem Browser ausführen, indem Sie TeaVM oder bck2brwsr als VM verwenden. – monacotoni

+0

Das ist mein Verständnis, ich brauche ein '' V/M-Plugin '' irgendeiner Beschreibung. Diese Option ist nicht "Javascript zu tun" es ruft Java von Javascript. – will

+1

bck2brwsr und TeaVM sind nicht * plugins *. Ihr Hauptzweck ist es Java-Code im Browser ausführen, ohne ein Plugin zu benötigen, damit es nicht mit einer Browser-Sicherheitsrichtlinie für Java in Konflikt gerät. – monacotoni

7

Während die Frage über das Kompilieren von Java-Quellen zu JavaScript ist, ist es erwähnenswert, dass es TeaVM gibt, die Java-Bytecode zu JavaScript kompiliert. Ich habe es nie versucht, aber es scheint sehr vielversprechend.

8

Ich bin mir nicht sicher, ob es zu Ihrem Anwendungsfall passt, aber wenn Sie Java-APIs und JavaScript-APIs aus Java löschen, können Sie JSweet verwenden, einen Java-zu-JavaScript-Transpiler, der auf TypeScript basiert.Es gibt Ihnen Zugriff auf Hunderte von gut typisierten JavaScript-APIs (DOM, jQuery, Unterstreichung, angularjs, usw.). Es generiert JavaScript-Code und Sie können es mit altem JavaScript und TypeScript-Code mischen.

Hinweis: JSweet wird nicht arbeiten für Legacy-Java-Code und Legacy-Java-APIs, aber Ihr Anwendungsfall erwähnt nicht wiederverwenden Legacy-Code.

[UPDATE] Seit Version 1.1 unterstützt JSweet jetzt auch einige Java APIs wie Collections (java.util). So ist es möglich, älteren Java-Code in gewissem Umfang wiederzuverwenden. Es ist auch ganz einfach, eigene Unterstützung für Java-APIs hinzuzufügen.

+0

das scheint zu streng. Es besagt, dass es Klasse X, Y, Z nicht finden kann. Gibt es eine Möglichkeit, es weniger streng zu machen? Ich brauche nur eine TS-Approximation, in der ich die Fehler, die es von Hand gibt, beheben kann. Ich will nur etwas, das ich auf eine Paketstruktur zeigen kann, und dann spuckt es ein TS-Äquivalent aus. Kann jsweet das tun? –

+0

Ich hoffe, dass http://stackoverflow.com/questions/39253788/installed-jsweet-now-what genug Details zu diesem Thema geben wird. –

3

Nicht vollständig am Thema, aber Kotlin ist eine 100% Java-kompatible Sprache, die auf JavaScript kompilieren kann.

IntelliJ IDEA kann Java automatisch in Kotlin konvertieren und es kompilieren, um auf Knoten oder dem Browser zu laufen.

+2

Kotlin hat ~ 1 MB Laufzeit. – garkin

+3

Dies funktioniert nur, wenn der Code zu 100% in Kotlin geschrieben wird, da Kotlin nicht in Javascript kompilieren kann, wenn Sie Java-Bibliotheken verwenden. – Tiago