Criado, desenvolvido pela Google, este compilador open source realiza source-to-source converte Java para JavaScript. Os desenvolvedores do J2CL dizem que o compilador permite um uso fluido do Java nas suas aplicações JavaScript.
O J2CL tenta resolver um problema diferente que frameworks similares como o GWT e não foi jeito para substituir estes framworks. Ao invés disto, o J2CL se preocupa interoperabilidade e a reutilização de código entre as plataformas. Você pode usar o J2CL para fazer um pedaço de código acessível no JavaScript ou converter uma aplicação inteira com ele.
A ferramenta foi desenvolvida com flexibilidade em mente e pode ser aplicada de diversas formas diferentes. Uma forma que você pode utiliza-la seria para implementar um algoritmo complexo em múltiplas tecnologias que atuam em plataformas diferentes.
Segundo Thomas Deegan (ex-contribuidor do projeto), um exemplo deste tipo de implementação ocorreu com a migração do Google Docs que precisava ser reescrito para se tornar uma aplicação web. Neste caso, o j2CL transpilou todas a lógica de renderização e manipulação dos documentos para JavaScript.
Mas a sua utilidade não para ai, você poderia aproveita-lo para converter para o back-end JavaScript (Node.js) criando bibliotecas que originalmente foram desenvolvidas em Java.
Infelizmente, nem todas as APIs Java, como a Java Reflection, tem suporte. Por default, o Código transpilado não é publico e diversos anotações Java (Java Annotations) fo JsInterop podem ser utilizadas para identificar quais classes, métodos, intancias de variáveis, etc… podem ser expostos.
O projeto possui um exemplo simples de “Hello World” para demonstrar sua utilização. Veja abaixo um exemplo similar utilizando uma anotação Java como ela pode ser utilizada no JavaScript.
package com.acme import jsinterop.annotations.JsType; @JsType public class HelloWorld { public static String getHelloWorld() { return "Hello from Java!"; } }
Pode ser utilizado da seguinte forma:
const HelloWorld = goog.require('com.acme'); console.log(HelloWorld.getHelloWorld());
De acordo com os desenvolvedores, o J2CL está em faze de produção e tem servido como a tecnologia utilizada para em diversos apps importantes do GSuites como Gmail, Inbox, Docs, Slides e Calendário.
Para mais informações, visite o guia básico do projeto no Github.