web-dev-qa-db-fra.com

Utilisez graalvm via le JDK 11 standard

J'ai utilisé le moteur Javascript Nashorn. J'essaie de migrer vers Java11 et également de Nashorn vers Graal. J'ai lu ici que je peux utiliser graal via l'installation standard de JDK à partir de JDK 11. J'ai également lu que Graal-SDK est chargé sur Maven central et que l'indicateur Java polyglot.js.nashorn-compat permet une migration aisée. . J'ai donc utilisé jdk11, ajouté la dépendance maven à pom.xml et utilisé l'indicateur Java, mais lorsque j'essaie d'obtenir le moteur nommé "graal.js", j'ai la valeur null ici:

ScriptEngine engine = engineManager.getEngineByName("graal.js")

Qu'est-ce que je manque? Comment le faire fonctionner?

4
Valentina Chumak

Voici un exemple de projet maven qui montre comment exécuter le moteur JavaScript GraalVM sur JDK11 à la fois via l'API de script et l'API polyglot. J'espère que ça aide!

https://github.com/graalvm/graal-js-jdk11-maven-demo

L’essentiel est d’ajouter les dépendances nécessaires (graal-sdk, js, js-scriptengine et éventuellement profiler et chromeinspector), d’exécuter avec les options expérimentales activées et le compilateur JVMCI (-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI) et de mettre à jour le chemin du module avec le jal graal ( --upgrade-module-path=${compiler.dir}/compiler.jar) qui est également disponible auprès de maven (org.graalvm.compiler:compiler).

3
BoriS

Il vous manque les dépendances suivantes: 

<dependency>
    <groupId>org.graalvm.js</groupId>
    <artifactId>js-scriptengine</artifactId>
</dependency>
<dependency>
    <groupId>org.graalvm.truffle</groupId>
    <artifactId>truffle-api</artifactId>
</dependency>

js-scriptengine contient l'implémentation ScriptEngine: com.Oracle.truffle.js.scriptengine.GraalJSScriptEngine

Et la truffle-api est requise (vous recevez le message d'erreur uniquement si vous instanciez directement la GraalJSEngineFactory:

GraalJSEngineFactory gsf = new GraalJSEngineFactory();

Cependant, il semble qu'il manque un autre paquet, car cela ne fonctionne pas pour moi.

1
Robert