JSweet : un transpilateur Java vers JavaScript
JSweet exploite TypeScript pour écrire des applications Web riches et réactives en Java grâce à l'utilisation de bibliothèques et de frameworks JavaScript. Avec JSweet, les programmes Java sont transpilés (compilés source à source) en TypeScript et JavaScript pour être exécutés dans les navigateurs, les vues Web mobiles ou dans Node.js.
- JSweet est sûr et fiable. Il fournit des applications Web avec vérification de type et génère des programmes JavaScript entièrement vérifiés. Il repose sur le compilateur Java d'Oracle (javac) et sur TypeScript de Microsoft (tsc).
- JSweet vous permet d'utiliser votre bibliothèque JS préférée (JSweet+Angular2, JSweet+fivejs, IONIC/Cordova, ...).
- JSweet permet le partage de code entre Java côté serveur et JavaScript côté client. JSweet fournit des implémentations pour les bibliothèques Java principales à des fins de partage de code et de migration Java héritée.
- JSweet est rapide, léger et entièrement interopérable avec JavaScript. Le code généré est du code JavaScript standard, ce qui n'implique aucune surcharge par rapport à JavaScript et peut interagir directement avec les programmes et bibliothèques JavaScript existants.
Comment ça marche ? JSweet dépend de descriptions bien typées d'API JavaScript, appelées "bonbons", la plupart d'entre elles étant automatiquement générées à partir de fichiers de définition TypeScript. Ces descriptions d'API en Java peuvent être considérées comme des en-têtes (de la même manière que les fichiers d'en-tête *.h en C) pour relier les bibliothèques JavaSript à partir de Java. Il existe plusieurs sources de bonbons pour les bibliothèques existantes et vous pouvez facilement créer un bonbon pour n'importe quelle bibliothèque (voir plus de détails).
Avec JSweet, vous profitez de tous les outils Java (IDE, Maven, ...) pour programmer de vraies applications JavaScript en utilisant les dernières bibliothèques JavaScript.
Java -> TypeScript -> JavaScript
Voici un premier aperçu de ce que vous obtenez en utilisant JSweet. Considérez ce simple programme 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 transpilation avec JSweet donne le programme TypeScript suivant :
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 ) ;
Ce qui produit à son tour la sortie JavaScript suivante :
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 ) ;
Plus avec le bac à sable en direct.
Caractéristiques
- Mappage syntaxique complet entre Java et TypeScript, y compris les classes, les interfaces, les types fonctionnels, les types d'union, les types de tuples, les types d'objets, les types de chaînes, etc.
- Prise en charge étendue des constructions Java et de la sémantique ajoutée depuis la version 1.1.0 (classes internes, classes anonymes, champs finaux, surcharge de méthode, opérateur instanceof, initialiseurs statiques, ...).
- Plus de 1000 bibliothèques, frameworks et plugins JavaScript pour écrire des applications Web et mobiles HTML5 (JQuery, Underscore, Angular, Backbone, Cordova, Node.js et bien plus encore).
- Un référentiel Maven contenant toutes les bibliothèques disponibles dans les artefacts Maven (alias bonbons).
- Prise en charge des API de base Java en tant que bonbon J4TS (issu de l'émulation JRE de GWT).
- Un plugin Eclipse pour une installation et une utilisation faciles.
- Un plugin Maven pour utiliser JSweet depuis n'importe quel autre IDE ou depuis la ligne de commande.
- Un plugin Gradle pour intégrer JSweet aux projets basés sur Gradle.
- Un mode débogage pour activer le débogage du code Java dans votre navigateur préféré.
- Un ensemble de jolis exemples WEB/Mobile HTML5 pour débuter et s'habituer à JSweet et aux API JavaScript les plus courantes (encore plus d'exemples dans la section Exemples).
- Prise en charge des bundles pour exécuter les programmes générés de la manière la plus simple.
- Prise en charge des modules JavaScript (commonjs, amd, umd). Les programmes JSweet peuvent s'exécuter dans un navigateur ou dans Node.js.
- Prise en charge de différentes versions cibles EcmaScript (ES3 à ES6).
- Prise en charge de l'idiome async/wait
- ...
Pour plus de détails, rendez-vous sur les spécifications linguistiques (PDF).
Commencer
- Étape 1 : Installez (ou vérifiez que vous avez installé) Git, Node.js et Maven (les commandes
git
, node
, npm
et mvn
doivent être sur votre chemin). - Étape 2 : Clonez le projet jsweet-quickstart depuis Github :
$ git clone https://github.com/cincheo/jsweet-quickstart.git
- Étape 3 : Exécutez le transpilateur pour générer le code JavaScript :
$ cd jsweet-quickstart
$ mvn generate-sources
- Étape 4 : Vérifiez le résultat dans votre navigateur :
$ firefox webapp/index.html
- Étape 5 : Modifiez le projet et démarrez la programmation :
- Consultez les exemples pour voir différents cas d'utilisation
- Accédez à des centaines de bibliothèques (bonbons)
- Référez-vous aux spécifications du langage pour en savoir plus sur la programmation avec JSweet
- Utilisateurs d'Eclipse : installez le plugin Eclipse pour obtenir un rapport d'erreurs en ligne, une construction après sauvegarde et une interface utilisateur de configuration simple.
Plus d'informations sur http://www.jsweet.org.
Exemples
- Exemples simples illustrant l'utilisation de divers frameworks en Java (jQuery, Underscore, Backbone, AngularJS, Knockout) : https://github.com/cincheo/jsweet-examples
- Exemples simples illustrant l'utilisation du framework Threejs en Java : https://github.com/cincheo/jsweet-examples-treejs)
- Node.js + Socket.IO + AngularJS : https://github.com/lgrignon/jsweet-node-example
- Quelques exemples simples pour démarrer avec React.js : https://github.com/cincheo/jsweet-examples-react
- Exemple de serveur JSweet JAX-RS (comment partager un modèle Java entre client et serveur) : https://github.com/lgrignon/jsweet-jaxrs-server-example
- Exemple JSweet Cordova / Polymère : https://github.com/lgrignon/jsweet-cordova-polymer-example
- Exemple JSweet Cordova / Ionic : https://github.com/lgrignon/jsweet-cordova-ionic-example
- Exemple JSweet Angular 2 : https://github.com/cincheo/jsweet-angular2-quickstart
- JSweet Angular 2 + PrimeNG : https://github.com/cincheo/jsweet-primeng-quickstart
Sous-projets
Ce référentiel est organisé en sous-projets. Chaque sous-projet a son propre processus de construction.
- Transpiler JSweet : le compilateur Java vers TypeScript/JavaScript.
- JSweet core candy : les API de base (langage JavaScript, JavaScript DOM et utilitaires du langage JSweet).
- Runtime JDK : un fork de l'émulation JRE de GWT pour implémenter les principales API JDK dans JSweet/TypeScript/JavaScript.
- Générateur de bonbons JSweet : un outil pour générer des API Java à partir de fichiers de définition TypeScript et les empaqueter sous forme de bonbons JSweet.
- Documentation JSweet : documentation JSweet.
De plus, certains outils pour JSweet sont disponibles dans des référentiels externes.
- Plugin Maven
- Plugin Gradle
- Plugin Eclipse
Comment construire
Veuillez vérifier le fichier README de chaque sous-projet.
Contribuer
JSweet utilise Git Flow. Vous pouvez créer un fork pour ce référentiel. La branche par défaut est développer. Veuillez utiliser git flow feature start myAwesomeFeature
pour commencer à travailler sur quelque chose de génial :) Lorsque vous avez terminé, vous pouvez soumettre une demande de tirage GitHub régulière.
Licence
Veuillez lire le fichier LICENCE.