Conçu, développé et mis en open source par Google, J2CL est un compilateur qui convertit du code Java en code Javascript. Les développeurs J2CL disent que le compilateur "permet une utilisation transparente de Java dans des applications JavaScript".
J2CL tente de résoudre un problème différent de celui des frameworks similaires Java vers Javascript tels que GWT. Il n'est pas conçu pour concurrencer ou remplacer les frameworks JavaScript existants. J2CL concerne plutôt l’interopérabilité et la réutilisation de code multi plateforme. Selon les développeurs, "vous pouvez utiliser J2CL uniquement pour rendre du code Java accessible à partir de JavaScript ou créer une application complète avec tout ce dont vous avez besoin selon ce qui vous convient le mieux".
L'outil a été développé dans un souci de flexibilité et peut être appliqué de différentes manières. L'une de ces manière consiste à s'assurer qu'une logique complexe s'exécutant sur plusieurs plates-formes implémentées dans différentes technologies peut être partagée sur plusieurs plates-formes. Par exemple, Thomas Deegan, un ancien contributeur du projet J2CL, a déclaré: "le code du frontal Google Docs doit être écrit pour le Web ... J2CL transpile toutes les manipulations de documents et la logique de rendu à partir de Java -> JS". Une autre utilisation peut être la réutilisation d'une bibliothèque écrite en Java dans une application Node.js.
J2CL peut traduire la plupart du code Java existant à partir de son source, mais toutes les API Java ne sont pas prises en charge, notamment l'API Reflection. Par défaut, le code traduit n'est pas public et un certain nombre d'annotations Java de JsInterop peuvent être utilisées pour identifier les classes, méthodes, variables d'instance ou autres codes à exposer. Le projet propose un simple « hello world » comme exemple pour démontrer l'utilisation. Un extrait légèrement modifié de cet exemple est présenté ci-dessous. Il présente une classe Java annotée et son utilisation en JavaScript.
La classe Java suivante, passée dans J2CL:
package com.acme
import jsinterop.annotations.JsType;
@JsType
public class HelloWorld {
public static String getHelloWorld() {
return "Hello from Java!";
}
}
peut être utilisé en JavaScript comme ceci
const HelloWorld = goog.require('com.acme');
console.log(HelloWorld.getHelloWorld());
Les développeurs affirment qu'il peut être utilisé en production et est utilisé comme "la technologie sous-jacente des applications GSuite les plus avancées développées par Google, notamment GMail, InBox, Docs, Slides et Calendar".
Le projet a été mis en open source à la fin de l’année dernière, mais il a été évoqué depuis 2014. À l’origine, J2CL était associé au projet GWT. Cependant, début 2015, les développeurs ont conclu que les objectifs du projet ne pouvaient pas être atteints dans le cadre du projet GWT et ont décidé de le séparer en son propre projet. L'intégration avec les outils existants n'est pas encore disponible et la prise en charge de Windows est actuellement limitée.
Pour plus d'informations, visitez la page Github du projet ou le guide de démarrage.