Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Nashorn : exécuter du JavaScript sur une JVM
En combinant des codes Java et JavaScript

Le , par vermine

61PARTAGES

7  0 
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 :

Code javascript : Sélectionner tout
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 : Sélectionner tout
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.

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.

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de youtpout978
Membre expert https://www.developpez.com
Le 21/12/2015 à 12:24
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.
0  0 
Avatar de heid
Membre confirmé https://www.developpez.com
Le 21/12/2015 à 13:30
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.
0  0 
Avatar de Zefling
Membre expert https://www.developpez.com
Le 21/12/2015 à 13:36
On utilise parfois une lib JS, comme celle de compilation du LESS. C'est dans ce genre de cas que Rhino ou Nashorn servent.
0  0 
Avatar de CoderInTheDark
Membre chevronné https://www.developpez.com
Le 22/12/2015 à 18:40
Peut 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 ?
0  0