Projetado e desenvolvido pelo Google e de código-aberto, o J2CL é um compilador de código fonte que converte código Java para Javascript. Os desenvolvedores do J2CL dizem que o compilador "permite o uso do Java em seus aplicativos JavaScript sem problemas".
O J2CL tenta resolver um problema diferente que frameworks semelhantes Java para Javascript, como o GWT tem, e não se destina a competir ou substituir frameworks JavaScript existentes. Ao invés disso, o J2CL está mais focado na interoperabilidade e reutilização de código entre plataformas. De acordo com os desenvolvedores, "é possível usar o J2CL apenas para tornar algum código Java acessível a partir do JavaScript ou criar um aplicativo inteiro com ele; o que atender melhor às necessidades."
A ferramenta foi desenvolvida pensando em flexibilidade e para poder ser aplicada de diferentes formas. Uma delas é garantir que lógica complexa sendo executada em várias plataformas, implementadas em diferentes tecnologias, possam ser compartilhadas entre si. Por exemplo, Thomas Deegan, um ex colaborador do projeto J2CL, diz que "o código inicial do Google Docs precisa ser escrito para web ... O J2CL faz a transpilação de toda a manipulação dos documentos e da lógica de renderização do Java -> JS". Podendo assim ser utilizada por outra biblioteca escrita em Java em um aplicativo Node.js.
O J2CL pode traduzir a maioria dos códigos Java existentes a partir da fonte, mas nem todas as APIs Java são suportadas, como a Java reflection API. Por padrão, o código traduzido não é público e várias anotações Java do JsInterop podem ser usadas para identificar quais classes, métodos, variáveis de instância ou outro código devem ser expostos. O projeto inclui um exemplo muito simples de "hello world" para demonstrar o uso. Um trecho com pequenas modificações mostrando uma classe Java anotada e como ela pode ser usada em JavaScript.
Classe Java sendo executada por meio do J2CL:
package com.acme
import jsinterop.annotations.JsType;
@JsType
public class HelloWorld {
public static String getHelloWorld() {
return "Hello from Java!";
}
}
Pode ser usada em JavaScript como abaixo.
const HelloWorld = goog.require('com.acme');
console.log(HelloWorld.getHelloWorld());
The developers claim it is production ready and serves as "the underlying technology of the most advanced GSuite apps developed by Google including GMail, Inbox, Docs, Slides and Calendar."
Os desenvolvedores afirmam que está pronta para produção e serve para "a tecnologia subjacente dos aplicativos do GSuite mais avançados e desenvolvidos pelo Google, incluindo o GMail, Inbox, Documentos, Apresentações e Calendário".
O projeto foi aberto no final do ano passado, mas as conversas sobre o projeto são de 2014. Originalmente, o J2CL estava associado ao projeto GWT. No entanto, no início de 2015, os desenvolvedores determinaram que os objetivos do projeto não poderiam ser cumpridos como parte do projeto do GWT e decidiram dividi-lo em seu próprio projeto. A integração com ferramentas existentes ainda não está disponível e o suporte para o Windows é atualmente limitado.
Para informações adicionais, visite o projeto Github page ou o guia getting started.