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?
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
).
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.