JSweet: ein Java-zu-JavaScript-Transpiler
JSweet nutzt TypeScript, um mithilfe von JavaScript-Bibliotheken und -Frameworks umfangreiche und reaktionsfähige Webanwendungen in Java zu schreiben. Mit JSweet werden Java-Programme in TypeScript und JavaScript transpiliert (von Quelle zu Quelle kompiliert), um sie in Browsern, mobilen Webansichten oder in Node.js auszuführen.
- JSweet ist sicher und zuverlässig. Es bietet Webanwendungen eine Typprüfung und generiert vollständig typgeprüfte JavaScript-Programme. Es basiert auf Oracles Java Compiler (javac) und auf Microsofts TypeScript (tsc).
- Mit JSweet können Sie Ihre bevorzugte JS-Bibliothek verwenden (JSweet+Angular2, JSweet+ThreeJS, IONIC/Cordova, ...).
- JSweet ermöglicht die gemeinsame Nutzung von Code zwischen serverseitigem Java und clientseitigem JavaScript. JSweet stellt Implementierungen für die Kern-Java-Bibliotheken für Code-Sharing und Legacy-Java-Migrationszwecke bereit.
- JSweet ist schnell, leichtgewichtig und vollständig mit JavaScript kompatibel. Der generierte Code ist regulärer JavaScript-Code, der im Vergleich zu JavaScript keinen Mehraufwand bedeutet und direkt mit vorhandenen JavaScript-Programmen und -Bibliotheken zusammenarbeiten kann.
Wie funktioniert es? JSweet ist auf gut typisierte Beschreibungen von JavaScript-APIs, sogenannte „Candies“, angewiesen, von denen die meisten automatisch aus TypeScript-Definitionsdateien generiert werden. Diese API-Beschreibungen in Java können als Header betrachtet werden (ähnlich den *.h-Header-Dateien in C), um JavaSript-Bibliotheken von Java zu überbrücken. Es gibt mehrere Quellen für Bonbons für bestehende Bibliotheken und Sie können ganz einfach Bonbons für jede Bibliothek da draußen erstellen (siehe weitere Details).
Mit JSweet nutzen Sie alle Java-Tools (IDEs, Maven, ...), um echte JavaScript-Anwendungen mit den neuesten JavaScript-Bibliotheken zu programmieren.
Java -> TypeScript -> JavaScript
Hier ist ein erster Vorgeschmack darauf, was Sie mit JSweet erhalten. Betrachten Sie dieses einfache Java-Programm:
package org . jsweet ;
import static jsweet . dom . Globals .*;
/**
* This is a very simple example that just shows an alert.
*/
public class HelloWorld {
public static void main ( String [] args ) {
alert ( "Hi there!" );
}
}
Das Transpilieren mit JSweet ergibt das folgende TypeScript-Programm:
namespace org . jsweet {
/**
* This is a very simple example that just shows an alert.
*/
export class HelloWorld {
public static main ( args : string [ ] ) {
alert ( "Hi there!" ) ;
}
}
}
org . jsweet . HelloWorld . main ( null ) ;
Was wiederum die folgende JavaScript-Ausgabe erzeugt:
var org ;
( function ( org ) {
var jsweet ;
( function ( jsweet ) {
/**
* This is a very simple example that just shows an alert.
*/
var HelloWorld = ( function ( ) {
function HelloWorld ( ) {
}
HelloWorld . main = function ( args ) {
alert ( "Hi there!" ) ;
} ;
return HelloWorld ;
} ( ) ) ;
jsweet . HelloWorld = HelloWorld ;
} ) ( jsweet = org . jsweet || ( org . jsweet = { } ) ) ;
} ) ( org || ( org = { } ) ) ;
org . jsweet . HelloWorld . main ( null ) ;
Mehr mit der Live-Sandbox.
Merkmale
- Vollständige Syntaxzuordnung zwischen Java und TypeScript, einschließlich Klassen, Schnittstellen, Funktionstypen, Union-Typen, Tupeltypen, Objekttypen, String-Typen usw.
- Umfangreiche Unterstützung von Java-Konstrukten und -Semantik seit Version 1.1.0 hinzugefügt (innere Klassen, anonyme Klassen, letzte Felder, Methodenüberladung, Instanzoperator, statische Initialisierer, ...).
- Über 1000 JavaScript-Bibliotheken , Frameworks und Plugins zum Schreiben von Web- und mobilen HTML5-Anwendungen (JQuery, Underscore, Angular, Backbone, Cordova, Node.js und viele mehr).
- Ein Maven-Repository, das alle verfügbaren Bibliotheken in Maven-Artefakten (auch bekannt als Bonbons) enthält.
- Unterstützung für Java-Basis-APIs als J4TS-Bonbon (aus der JRE-Emulation des GWT abgeleitet).
- Ein Eclipse-Plugin für einfache Installation und Verwendung.
- Ein Maven-Plugin zur Verwendung von JSweet von jeder anderen IDE oder über die Befehlszeile.
- Ein Gradle-Plugin zur Integration von JSweet in Gradle-basierte Projekte.
- Ein Debug-Modus, um das Debuggen von Java-Code in Ihrem bevorzugten Browser zu ermöglichen.
- Eine Reihe schöner WEB/Mobile HTML5-Beispiele für den Einstieg und die Gewöhnung an JSweet und die gängigsten JavaScript-APIs (noch mehr Beispiele im Abschnitt „Beispiele“).
- Unterstützung für Bundles, um die generierten Programme auf einfachste Weise auszuführen.
- Unterstützung für JavaScript-Module (commonjs, amd, umd). JSweet-Programme können in einem Browser oder in Node.js ausgeführt werden.
- Unterstützung für verschiedene EcmaScript-Zielversionen (ES3 bis ES6).
- Unterstützung für die Redewendung „async/await“.
- ...
Weitere Einzelheiten finden Sie in den Sprachspezifikationen (PDF).
Erste Schritte
- Schritt 1: Installieren Sie Git, Node.js und Maven (oder überprüfen Sie, ob Sie es installiert haben) (die Befehle
git
, node
, npm
und mvn
sollten sich in Ihrem Pfad befinden). - Schritt 2: Klonen Sie das jsweet-quickstart-Projekt von Github:
$ git clone https://github.com/cincheo/jsweet-quickstart.git
- Schritt 3: Führen Sie den Transpiler aus, um den JavaScript-Code zu generieren:
$ cd jsweet-quickstart
$ mvn generate-sources
- Schritt 4: Sehen Sie sich das Ergebnis in Ihrem Browser an:
$ firefox webapp/index.html
- Schritt 5: Projekt bearbeiten und mit der Programmierung beginnen:
- Schauen Sie sich die Beispiele an, um verschiedene Anwendungsfälle zu sehen
- Erhalten Sie Zugriff auf Hunderte von Libs (Süßigkeiten)
- Weitere Informationen zum Programmieren mit JSweet finden Sie in den Sprachspezifikationen
- Eclipse-Benutzer: Installieren Sie das Eclipse-Plugin, um Inline-Fehlerberichte, Build-on-Save und eine einfache Konfigurationsoberfläche zu erhalten
Weitere Informationen unter http://www.jsweet.org.
Beispiele
- Einfache Beispiele, die die Verwendung verschiedener Frameworks in Java veranschaulichen (jQuery, Underscore, Backbone, AngularJS, Knockout): https://github.com/cincheo/jsweet-examples
- Einfache Beispiele, die die Verwendung des Threejs-Frameworks in Java veranschaulichen: https://github.com/cincheo/jsweet-examples- threejs)
- Node.js + Socket.IO + AngularJS: https://github.com/lgrignon/jsweet-node-example
- Einige einfache Beispiele für den Einstieg mit React.js: https://github.com/cincheo/jsweet-examples-react
- Beispiel für einen JSweet JAX-RS-Server (wie man ein Java-Modell zwischen Client und Server teilt): https://github.com/lgrignon/jsweet-jaxrs-server-example
- JSweet Cordova / Polymer-Beispiel: https://github.com/lgrignon/jsweet-cordova-polymer-example
- JSweet Cordova / Ionic-Beispiel: https://github.com/lgrignon/jsweet-cordova-ionic-example
- Beispiel für JSweet Angular 2: https://github.com/cincheo/jsweet-angular2-quickstart
- JSweet Angular 2 + PrimeNG: https://github.com/cincheo/jsweet-primeng-quickstart
Teilprojekte
Dieses Repository ist in Unterprojekte organisiert. Jedes Teilprojekt hat seinen eigenen Build-Prozess.
- JSweet-Transpiler: der Java-zu-TypeScript/JavaScript-Compiler.
- JSweet-Kernbonbons: die Kern-APIs (JavaScript-Sprache, JavaScript-DOM und JSweet-Sprachdienstprogramme).
- JDK-Laufzeit: ein Fork der JRE-Emulation von GWT zur Implementierung der wichtigsten JDK-APIs in JSweet/TypeScript/JavaScript.
- JSweet Candy Generator: ein Tool zum Generieren von Java-APIs aus TypeScript-Definitionsdateien und zum Verpacken dieser als JSweet Candys.
- JSweet-Dokumentation: JSweet-Dokumentation.
Darüber hinaus sind einige Tools für JSweet in externen Repositories verfügbar.
- Maven-Plugin
- Gradle-Plugin
- Eclipse-Plugin
Wie baut man
Bitte überprüfen Sie die README-Datei jedes Unterprojekts.
Mitwirken
JSweet verwendet Git Flow. Sie können dieses Repository forken. Der Standardzweig ist „Entwickeln“. Bitte verwenden Sie git flow feature start myAwesomeFeature
um mit der Arbeit an etwas Großartigem zu beginnen :) Wenn Sie fertig sind, können Sie einen regulären GitHub Pull Request einreichen.
Lizenz
Bitte lesen Sie die LIZENZ-Datei.