GraalJSEngineFactory无法实例化

问题描述

我是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/

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...