0

我是格拉尔的新手。我指的是这个文件。我正在使用 JDK 11。

下面是我试图运行的代码:

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();
}

正在使用的罐子:

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

在尝试执行上面的代码时,我遇到了以下错误:

ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider com.oracle.truffle.js.scriptengine.GraalJSEngineFactory 无法实例化

我尝试使用以下 VM 选项运行代码:

-Dpolyglot.inspect.Secure=false

它仍然没有解决问题。

4

2 回答 2

0

最后不得不使用构建自动化并让它工作,这很奇怪,因为我没有提到任何新的罐子,除了我已经手动添加的罐子。

如果使用 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但正如我所说,只是通过解压缩 graalvm 社区二进制文件或从 maven repo 到我的 java 项目手动添加必要的 jar 并没有解决问题除非我使用 maven/gradle 进行依赖管理。希望能帮助其他有同样问题的人:)。

于 2020-09-25T21:38:00.693 回答
-1

最简单和最有效的解决方案是在 GraalVM 发行版上运行您的代码:只需更改您JAVA_HOME的 GraalVM 路径或更改 IDE 中的 Java 主页设置。

如果您坚持使用其他 JDK 发行版,请查看https://www.graalvm.org/reference-manual/js/RunOnJDK/

于 2020-09-25T09:18:59.310 回答