J2CL: Googles Java to Closure Transpiler ist Open Source
Mit J2CL können Java-Entwickler von der UI-Entwicklung bis zum Backend durchgängig mit Java und ihren bekannten Werkzeugen arbeiten.
![Googles Java-zu-Closure-Transpiler ist Open Source](https://heise.cloudimg.io/width/610/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/2/5/4/3/1/7/4/compiler-3edf36cdfae9bf2c-4cb8138496746c3b.jpeg)
Nach vier Jahren interner Arbeit hat Google nun ersten Quellcode von J2CL in GitHub veröffentlicht. Vor der Veröffentlichung wurde der Java to Closure Transpiler bei Anwendungen wie GMail, Inbox, Docs, Slides und Calendar erprobt.
Zwar sind bei vielen Entwicklern Frameworks für Single Page Applications (SPA) wie Angular, React und Vue.js gesetzt – bei ihnen werden aber JavaScript-Kenntnisse vorausgesetzt. Mit J2CL können Java-Entwickler von der UI-Entwicklung bis zum Backend durchgängig mit Java und ihren bekannten Werkzeugen arbeiten. Damit ist ein durchgängiges Refactoring einfach möglich. Außerdem kann die Entwicklung mit unterschiedlichen Programmiersprachen teuer ein. Netflix präsentiert die hierzu gemachten Erfahrungen auf YouTube:
Warum J2CL?
Die Geschichte von J2CL begann 2015, als das GWT-Team (Google Web Toolkit) neue Anforderungen für die zeitgemäße Webentwicklung aufnehmen musste. Die Idee von einem Java-zu-JavaScript-Übersetzer (Transpiler) wurde seit 2006 mit GWT umgesetzt. Es bietet ein Softwarepaket bestehend aus Transpiler, UI-Framework und Helper-Werkzeugen an. Durch den Trend, Micro-UIs mit unterschiedlichen JavaScript-Frameworks umzusetzen, skaliert jedoch dieser Ansatz bei Google nicht. Deswegen wurde die Idee für eine leichte und schnelle Übersetzung von Java zu JavaScript ohne zusätzliche Frameworks und Werkzeuge geboren.
Mit der Veröffentlichung von J2CL sind zwei Konzepte nicht mehr wegzudenken:
- JsInterop existiert bereits seit GWT 2.8.x, und in J2CL wird JsInterop zum wichtigsten Bestandteil des Transpilers. Es regelt die bidirektionale Interoperabilität zwischen Java und JavaScript und ersetzt damit JSNI (JavaScript Native Interface).
- Elemental2 wird für den Zugriff auf die Browser-APIs wie DOM, WebGL, WebStorage, IndexDB, SVG sowie Promise genutzt. Für die Vereinfachung der Nutzung von Elemental2 steht das Framework Elemento zur Verfügung.
Folgendes Beispiel zeigt eine Java-Klasse, die anschließend in JavaScript verwendet wird:
package com.google.j2cl.samples.helloworldlib;
@JsType // JsInterop
public class HelloWorld {
public static String getHelloWorld() {
return "Hello from Java!";
}
}
Hello from Java
const HelloWorld = goog.require('com.google.j2cl.samples.helloworldlib.HelloWorld');
function sayHello() {
document.write(HelloWorld.getHelloWorld() + ' and JS!');
}
Hello from JavaScript
Derzeit nutzt J2CL Bazel als Build-System, das bei vielen Entwicklern leider unbekannt ist. Die Community von GWT ist jedoch bereits tätig und plant, dass GWT 3 auf J2CL basiert und Standard-Build-Werkzeuge wie Maven und Gradle unterstützt. Firmen wie Vertispan und viele individuelle Kontributoren investieren Zeit und Ressourcen, um GWT 3 auf den Weg zu bringen.
Ökosystem
Inzwischen sind einige UI-Frameworks für J2CL beziehungsweise GWT 3 entstanden. Beispiele hierfür sind DominoUI, VueGWT und Nalu Kit. Ebenso steht das sich an Spring Boot orientierende GWT Boot zur Verfügung, mit dem Entwickler einen leichten Einstieg in GWT mit vielen angebotenen Frameworks bekommen. Interessierte Entwickler, die den Status der Entwicklung von GWT 3 weiterverfolgen möchten, ist der GWT Gitter Chat zu empfehlen.
Siehe dazu auf heise Developer:
(ane)