问题描述
我是Graal的新手。我指的是this document。我正在使用JDK 11。
以下是我要运行的代码:
ThisLibrary_testlist.h
正在使用的罐子:
ScriptEngine graaljsEngine = new ScriptEngineManager().getEngineByName("graal.js");
if (graaljsEngine == null)
{
System.out.println("Graal.js not found");
return null;
}
try
{
System.out.println(graaljsEngine.eval("IncomingMessageString"));
}
catch (ScriptException e)
{
e.printstacktrace();
}
ScriptEngineManager provider.next():javax.script.ScriptEngineFactory:提供者 com.oracle.truffle.js.scriptengine.GraalJSEngineFactory无法实例化
我尝试使用以下VM选项运行代码:
1: truffle-api-20.2.0.jar
2: js-scriptengine-20.2.0.jar
3: js-20.2.0.jar
4: graal-sdk-20.2.0.jar
5: compiler-20.2.0.jar
它仍然不能解决问题。
解决方法
最后必须使用构建自动化,然后它才能正常工作,这很奇怪,因为除了我已经手动添加的罐子之外,我没有提到任何新的罐子。
如果使用gradle将其放入build.gradle,那么您会很好:
dependencies {
compile group: 'org.graalvm.js',name: 'js',version: '20.2.0'
compile group: 'org.graalvm.js',name: 'js-scriptengine',version: '20.2.0'
compile group: 'org.graalvm.sdk',name: 'graal-sdk',version: '20.2.0'
compile group: 'org.graalvm.truffle',name: 'truffle-api',version: '20.2.0'
}
如果使用maven,请将其放在build.gradle中,这样您就很好了:
<properties>
<graalvm.version>20.2.0</graalvm.version>
<compiler.dir>${project.build.directory}/compiler</compiler.dir>
</properties>
<dependencies>
<dependency>
<groupId>org.graalvm.sdk</groupId>
<artifactId>graal-sdk</artifactId>
<version>${graalvm.version}</version>
</dependency>
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js</artifactId>
<version>${graalvm.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js-scriptengine</artifactId>
<version>${graalvm.version}</version>
</dependency>
<dependency>
<groupId>org.graalvm.tools</groupId>
<artifactId>profiler</artifactId>
<version>${graalvm.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.graalvm.tools</groupId>
<artifactId>chromeinspector</artifactId>
<version>${graalvm.version}</version>
<scope>runtime</scope>
</dependency>
我可以肯定地说,这些构建自动化工具可以通过获取其他丢失的jar来解决问题。我发现此链接很有用:http://www.mosgrom.net/stuff/graalvm.html,但是正如我所说的那样,除非我使用maven / gradle进行依赖项管理,否则通过将graalvm社区二进制文件或从maven repo解压缩到Java项目中来手动添加必需的jar并不能解决问题。希望对其他有同样问题的人有所帮助:)。
,最简单,最有效的解决方案是在GraalVM发行版上运行代码:只需将JAVA_HOME
更改为GraalVM的路径或在IDE中更改Java home设置。
如果您坚持使用其他JDK发行版,请查看https://www.graalvm.org/reference-manual/js/RunOnJDK/