JSweet: um transpilador Java para JavaScript
JSweet aproveita o TypeScript para escrever aplicativos da Web ricos e responsivos em Java por meio do uso de bibliotecas e estruturas JavaScript. Com JSweet, os programas Java são transpilados (compilados de fonte para fonte) para TypeScript e JavaScript para serem executados em navegadores, visualizações da Web móveis ou em Node.js.
- JSweet é seguro e confiável. Ele fornece verificação de tipo a aplicativos da web e gera programas JavaScript totalmente verificados. Baseia-se no Java Compiler da Oracle (javac) e no TypeScript da Microsoft (tsc).
- JSweet permite que você use sua biblioteca JS favorita (JSweet+Angular2, JSweet+trêsjs, IONIC/Cordova, ...).
- JSweet permite o compartilhamento de código entre Java do lado do servidor e JavaScript do lado do cliente. JSweet fornece implementações para as principais bibliotecas Java para compartilhamento de código e propósito de migração Java legado.
- JSweet é rápido, leve e totalmente interoperável com JavaScript. O código gerado é um código JavaScript regular, o que não implica nenhuma sobrecarga em comparação com o JavaScript e pode interoperar diretamente com programas e bibliotecas JavaScript existentes.
Como funciona? JSweet depende de descrições bem digitadas de APIs JavaScript, os chamados "doces", a maioria deles gerados automaticamente a partir de arquivos de definição TypeScript. Essas descrições de API em Java podem ser vistas como cabeçalhos (semelhante aos arquivos de cabeçalho *.h em C) para conectar bibliotecas JavaSript de Java. Existem diversas fontes de doces para bibliotecas existentes e você pode facilmente construir um doce para qualquer biblioteca existente (veja mais detalhes).
Com JSweet, você aproveita todas as ferramentas Java (IDE's, Maven, ...) para programar aplicações JavaScript reais usando as bibliotecas JavaScript mais recentes.
Java -> TypeScript -> JavaScript
Aqui está uma primeira amostra do que você obtém usando JSweet. Considere este programa Java simples:
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!" );
}
}
A transpilação com JSweet fornece o seguinte programa TypeScript:
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 ) ;
O que, por sua vez, produz a seguinte saída JavaScript:
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 ) ;
Mais com a sandbox ao vivo.
Características
- Mapeamento de sintaxe completo entre Java e TypeScript, incluindo classes, interfaces, tipos funcionais, tipos de união, tipos de tupla, tipos de objeto, tipos de string e assim por diante.
- Suporte extensivo de construções e semântica Java adicionadas desde a versão 1.1.0 (classes internas, classes anônimas, campos finais, sobrecarga de método, operador instanceof, inicializadores estáticos, ...).
- Mais de 1000 bibliotecas JavaScript , estruturas e plug-ins para escrever aplicativos HTML5 para Web e dispositivos móveis (JQuery, Underscore, Angular, Backbone, Cordova, Node.js e muito mais).
- Um repositório Maven contendo todas as bibliotecas disponíveis em artefatos Maven (também conhecidos como doces).
- Suporte para APIs básicas Java como J4TS candy (bifurcado da emulação JRE do GWT).
- Um plugin Eclipse para fácil instalação e uso.
- Um plugin Maven para usar JSweet de qualquer outro IDE ou da linha de comando.
- Um plugin Gradle para integrar JSweet com projetos baseados em Gradle.
- Um modo de depuração para permitir a depuração de código Java em seu navegador favorito.
- Um conjunto de bons exemplos de HTML5 para WEB/Mobile para começar e se acostumar com JSweet e as APIs JavaScript mais comuns (ainda mais exemplos na seção Exemplos).
- Suporte a pacotes para executar os programas gerados da forma mais simples.
- Suporte para módulos JavaScript (commonjs, amd, umd). Os programas JSweet podem ser executados em um navegador ou em Node.js.
- Suporte para várias versões de destino EcmaScript (ES3 a ES6).
- Suporte para idioma assíncrono/aguardado
- ...
Para mais detalhes, acesse as especificações do idioma (PDF).
Começando
- Passo 1: Instale (ou verifique se você instalou) Git, Node.js e Maven (os comandos
git
, node
, npm
e mvn
devem estar em seu caminho). - Etapa 2: clonar o projeto jsweet-quickstart do Github:
$ git clone https://github.com/cincheo/jsweet-quickstart.git
- Etapa 3: execute o transpiler para gerar o código JavaScript:
$ cd jsweet-quickstart
$ mvn generate-sources
- Passo 4: Confira o resultado em seu navegador:
$ firefox webapp/index.html
- Passo 5: Edite o projeto e comece a programar:
- Confira os exemplos para ver vários casos de uso
- Tenha acesso a centenas de libs (doces)
- Consulte as especificações da linguagem para saber mais sobre programação com JSweet
- Usuários do Eclipse: instale o plug-in Eclipse para obter relatórios de erros em linha, criação ao salvar e interface de usuário de fácil configuração
Mais informações em http://www.jsweet.org.
Exemplos
- Exemplos simples que ilustram o uso de vários frameworks em Java (jQuery, Underscore, Backbone, AngularJS, Knockout): https://github.com/cincheo/jsweet-examples
- Exemplos simples que ilustram o uso da estrutura Threejs em Java: https://github.com/cincheo/jsweet-examples-threejs)
- Node.js + Socket.IO + AngularJS: https://github.com/lgrignon/jsweet-node-example
- Alguns exemplos simples para começar a usar React.js: https://github.com/cincheo/jsweet-examples-react
- Exemplo de servidor JSweet JAX-RS (como compartilhar um modelo Java entre cliente e servidor): https://github.com/lgrignon/jsweet-jaxrs-server-example
- Exemplo JSweet Cordova / Polímero: https://github.com/lgrignon/jsweet-cordova-polymer-example
- Exemplo JSweet Cordova/Ionic: https://github.com/lgrignon/jsweet-cordova-ionic-example
- Exemplo JSweet Angular 2: https://github.com/cincheo/jsweet-angular2-quickstart
- JSweet Angular 2 + PrimeNG: https://github.com/cincheo/jsweet-primeng-quickstart
Subprojetos
Este repositório está organizado em subprojetos. Cada subprojeto tem seu próprio processo de construção.
- Transpilador JSweet: o compilador Java para TypeScript/JavaScript.
- JSweet core candy: as APIs principais (linguagem JavaScript, JavaScript DOM e utilitários de linguagem JSweet).
- Tempo de execução JDK: um fork da emulação JRE do GWT para implementar as principais APIs JDK em JSweet/TypeScript/JavaScript.
- Gerador de doces JSweet: uma ferramenta para gerar APIs Java a partir de arquivos de definição TypeScript e empacotá-los como doces JSweet.
- Documentação JSweet: Documentação JSweet.
Além disso, algumas ferramentas para JSweet estão disponíveis em repositórios externos.
- Plug-in Maven
- Plug-in Gradle
- Plug-in Eclipse
Como construir
Verifique o arquivo README de cada subprojeto.
Contribuindo
JSweet usa Git Flow. Você pode bifurcar este repositório. O branch padrão é desenvolver. Use git flow feature start myAwesomeFeature
para começar a trabalhar em algo excelente :) Quando terminar, você pode enviar uma solicitação pull regular do GitHub.
Licença
Por favor, leia o arquivo LICENSE.