JSweet: un transpilador de Java a JavaScript
JSweet aprovecha TypeScript para escribir aplicaciones web ricas y responsivas en Java mediante el uso de bibliotecas y marcos de JavaScript. Con JSweet, los programas Java se transpilan (se compilan de fuente a fuente) a TypeScript y JavaScript para ejecutarlos en navegadores, vistas web móviles o en Node.js.
- JSweet es seguro y confiable. Proporciona aplicaciones web con verificación de tipo y genera programas JavaScript totalmente verificados. Se basa en el compilador Java de Oracle (javac) y en TypeScript de Microsoft (tsc).
- JSweet le permite utilizar su biblioteca JS favorita (JSweet+Angular2, JSweet+tresjs, IONIC/Cordova, ...).
- JSweet permite compartir código entre Java del lado del servidor y JavaScript del lado del cliente. JSweet proporciona implementaciones para las bibliotecas principales de Java para compartir código y migrar Java heredado.
- JSweet es rápido, liviano y totalmente interoperable con JavaScript. El código generado es código JavaScript normal, lo que no implica gastos generales en comparación con JavaScript y puede interoperar directamente con programas y bibliotecas de JavaScript existentes.
¿Cómo funciona? JSweet depende de descripciones bien escritas de las API de JavaScript, los llamados "caramelos", la mayoría de ellos generados automáticamente a partir de archivos de definición de TypeScript. Estas descripciones de API en Java pueden verse como encabezados (de manera similar a los archivos de encabezado *.h en C) para unir las bibliotecas JavaSript desde Java. Hay varias fuentes de dulces para las bibliotecas existentes y puedes crear fácilmente un dulce para cualquier biblioteca (ver más detalles).
Con JSweet, aprovecha todas las herramientas de Java (IDE, Maven, ...) para programar aplicaciones JavaScript reales utilizando las últimas bibliotecas de JavaScript.
Java -> TypeScript -> JavaScript
Aquí tienes una primera muestra de lo que obtienes al utilizar JSweet. Considere este sencillo programa Java:
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!" );
}
}
La transpilación con JSweet proporciona el siguiente 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 ) ;
Lo que a su vez produce la siguiente salida de 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 ) ;
Más con la zona de pruebas en vivo.
Características
- Mapeo de sintaxis completo entre Java y TypeScript, incluidas clases, interfaces, tipos funcionales, tipos de unión, tipos de tuplas, tipos de objetos, tipos de cadenas, etc.
- Amplio soporte para construcciones y semántica de Java agregado desde la versión 1.1.0 (clases internas, clases anónimas, campos finales, sobrecarga de métodos, operador de instancia, inicializadores estáticos, ...).
- Más de 1000 bibliotecas, marcos y complementos de JavaScript para escribir aplicaciones HTML5 web y móviles (JQuery, Underscore, Angular, Backbone, Cordova, Node.js y mucho más).
- Un repositorio de Maven que contiene todas las bibliotecas disponibles en artefactos de Maven (también conocidos como dulces).
- Soporte para API básicas de Java como el caramelo J4TS (bifurcado de la emulación JRE de GWT).
- Un complemento de Eclipse para una fácil instalación y uso.
- Un complemento de Maven para usar JSweet desde cualquier otro IDE o desde la línea de comandos.
- Un complemento de Gradle para integrar JSweet con proyectos basados en Gradle.
- Un modo de depuración para habilitar la depuración de código Java en su navegador favorito.
- Un conjunto de buenos ejemplos WEB/Mobile HTML5 para comenzar y acostumbrarse a JSweet y las API de JavaScript más comunes (aún más ejemplos en la sección Ejemplos).
- Soporte para paquetes para ejecutar los programas generados de la forma más sencilla.
- Soporte para módulos JavaScript (commonjs, amd, umd). Los programas JSweet pueden ejecutarse en un navegador o en Node.js.
- Soporte para varias versiones de destino de EcmaScript (ES3 a ES6).
- Soporte para modismo async/await
- ...
Para más detalles, vaya a las especificaciones de idioma (PDF).
Empezando
- Paso 1: Instale (o verifique que haya instalado) Git, Node.js y Maven (los comandos
git
, node
, npm
y mvn
deben estar en su ruta). - Paso 2: clona el proyecto jsweet-quickstart de Github:
$ git clone https://github.com/cincheo/jsweet-quickstart.git
- Paso 3: ejecute el transpilador para generar el código JavaScript:
$ cd jsweet-quickstart
$ mvn generate-sources
- Paso 4: consulta el resultado en tu navegador:
$ firefox webapp/index.html
- Paso 5: edite el proyecto y comience a programar:
- Consulte los ejemplos para ver varios casos de uso.
- Obtenga acceso a cientos de libs (caramelos)
- Consulte las especificaciones del lenguaje para saber más sobre la programación con JSweet.
- Usuarios de Eclipse: instale el complemento de Eclipse para obtener informes de errores en línea, compilación al guardar y una interfaz de usuario de configuración sencilla.
Más información en http://www.jsweet.org.
Ejemplos
- Ejemplos sencillos que ilustran el uso de varios frameworks en Java (jQuery, Underscore, Backbone, AngularJS, Knockout): https://github.com/cincheo/jsweet-examples
- Ejemplos simples que ilustran el uso del marco Threejs en Java: https://github.com/cincheo/jsweet-examples-tresjs)
- Node.js + Socket.IO + AngularJS: https://github.com/lgrignon/jsweet-node-example
- Algunos ejemplos simples para comenzar con React.js: https://github.com/cincheo/jsweet-examples-react
- Ejemplo de servidor JSweet JAX-RS (cómo compartir un modelo Java entre cliente y servidor): https://github.com/lgrignon/jsweet-jaxrs-server-example
- Ejemplo de JSweet Cordova/polímero: https://github.com/lgrignon/jsweet-cordova-polymer-example
- Ejemplo de JSweet Cordova/Ionic: https://github.com/lgrignon/jsweet-cordova-ionic-example
- Ejemplo de JSweet Angular 2: https://github.com/cincheo/jsweet-angular2-quickstart
- JSweet Angular 2 + PrimeNG: https://github.com/cincheo/jsweet-primeng-quickstart
Subproyectos
Este repositorio está organizado en subproyectos. Cada subproyecto tiene su propio proceso de construcción.
- Transpilador JSweet: el compilador de Java a TypeScript/JavaScript.
- JSweet core candy: las API principales (lenguaje JavaScript, DOM de JavaScript y utilidades del lenguaje JSweet).
- Tiempo de ejecución de JDK: una bifurcación de la emulación JRE de GWT para implementar las principales API de JDK en JSweet/TypeScript/JavaScript.
- Generador de dulces JSweet: una herramienta para generar API de Java a partir de archivos de definición de TypeScript y empaquetarlos como dulces JSweet.
- Documentación de JSweet: documentación de JSweet.
Además, algunas herramientas para JSweet están disponibles en repositorios externos.
- Complemento Maven
- Complemento de Gradle
- Complemento de eclipse
como construir
Verifique el archivo README de cada subproyecto.
Contribuyendo
JSweet usa Git Flow. Puedes bifurcar este repositorio. La rama predeterminada es desarrollar. Utilice git flow feature start myAwesomeFeature
para comenzar a trabajar en algo genial :) Cuando haya terminado, puede enviar una solicitud de extracción de GitHub normal.
Licencia
Lea el archivo de LICENCIA.