Nashorn : exécuter du JavaScript sur une JVM
En combinant des codes Java et JavaScript
Le 2015-12-21 10:18:32, par vermine, Expert éminent sénior
Nashorn est un environnement d'exécution JavaScript de haute performance écrit en Java pour la JVM (Java Virtual Machine).
Le projet a été mis en place à l'origine par Oracle qui l'a ensuite ouvert à la communauté via OpenJDK.
Il permet aux développeurs d'intégrer le code JavaScript à l'intérieur de leurs applications Java et même d'utiliser les classes et méthodes Java à partir de leur code JavaScript. Il peut être conçu comme un substitut au moteur JavaScript V8 de Google. C'est un successeur de l'environnement d'exécution Rhino qui était fourni avec les versions antérieures du JDK. Nashorn est écrit à partir de zéro en utilisant les nouvelles fonctionnalités du langage comme JSR 292 (Supporting Dynamically Typed Languages) et invokedynamic.
Actuellement, Nashorn supporte la spécification ECMAScript 5.1 et le support de ECMAScript 6 est bien entendu en cours.
Voici un exemple qui utilise la classe Java HashMap en ligne de commande avec l'outil jjs :
Vous pouvez donc utiliser notamment :
Vous pouvez également utiliser Nashorn dans du code Java :
Pour plus de détails, n'hésitez pas à lire ce tutoriel sur GitHub.
Le blog officiel.
Et vous ?
Que pensez-vous de ce projet ?
Connaissez-vous des outils similaires ?
Découvrez également les cours et tutoriels Java de Developpez.com ainsi que ceux sur le JavaScript.
Le projet a été mis en place à l'origine par Oracle qui l'a ensuite ouvert à la communauté via OpenJDK.
Il permet aux développeurs d'intégrer le code JavaScript à l'intérieur de leurs applications Java et même d'utiliser les classes et méthodes Java à partir de leur code JavaScript. Il peut être conçu comme un substitut au moteur JavaScript V8 de Google. C'est un successeur de l'environnement d'exécution Rhino qui était fourni avec les versions antérieures du JDK. Nashorn est écrit à partir de zéro en utilisant les nouvelles fonctionnalités du langage comme JSR 292 (Supporting Dynamically Typed Languages) et invokedynamic.
Actuellement, Nashorn supporte la spécification ECMAScript 5.1 et le support de ECMAScript 6 est bien entendu en cours.
Voici un exemple qui utilise la classe Java HashMap en ligne de commande avec l'outil jjs :
Code javascript : |
1 2 3 4 5 6 7 | jjs> var HashMap = Java.type("java.util.HashMap") jjs> var userAndAge = new HashMap() jjs> userAndAge.put("shekhar",32) null jjs> userAndAge.put("rahul",33) null jjs> userAndAge.get("shekhar") |
Vous pouvez donc utiliser notamment :
- des classes ;
- des méthodes statiques ;
- des bibliothèques JavaScript externes ;
- des scripts personnalisés en utilisant les caractéristiques d'un shell Unix ;
- les nouveautés de Java 8 ;
- etc.
Vous pouvez également utiliser Nashorn dans du code Java :
Code java : |
1 2 3 4 5 6 | public static void main(String[] args) throws ScriptException { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine nashorn = manager.getEngineByName("nashorn"); Integer eval = (Integer) nashorn.eval("10 + 20"); System.out.println(eval); } |
Pour plus de détails, n'hésitez pas à lire ce tutoriel sur GitHub.
Et vous ?
Découvrez également les cours et tutoriels Java de Developpez.com ainsi que ceux sur le JavaScript.
-
youtpout978Expert confirméJe pense que si les devs ont l'occasion d'utiliser Java ou JS ils préféreront utiliser Java , je pense que l'utilité sera surtout la réutilisation de code JS ou pour un dev faisant principalement du JS mais au-delà de ça je vois pas pourquoi un dev se tournera vers cette solution, j'espère que ça ne sera pas pousser par les décideurs pour être dans le hype.le 21/12/2015 à 12:24
-
heidMembre confirméCa permet par exemple d'ouvrir a des tiers via des script JS (plus grand public qu'un jar a livrer) des opération sur des données. Par exemple permettre à des personnes d'aller personnaliser des contrôles métier avant une opération lambda sur un bean.le 21/12/2015 à 13:30
-
ZeflingExpert confirméOn utilise parfois une lib JS, comme celle de compilation du LESS. C'est dans ce genre de cas que Rhino ou Nashorn servent.le 21/12/2015 à 13:36
-
CoderInTheDarkMembre éméritePeut on l'utiliser pour ajouter un outil de scripts à son application ? Comme on ferait du VBA...
Dans ce cas là comment limiter le périmètre des classes disponibles aux utilisateurs ?le 22/12/2015 à 18:40