【问题标题】:GraalVM JavaScript suffers from "host access" issuesGraalVM JavaScript 存在“主机访问”问题
【发布时间】:2022-01-26 04:29:19
【问题描述】:

这是通过 GraalVM CE 21.3.0 的 JavaScrupt 解释器外壳完成的。

尝试访问某些 Java 类,例如 java.io.File 会导致此错误:

TypeError: Access to host class java.io.File is not allowed or does not exist.

在没有任何选项的情况下运行 shell 时需要这么多才能得到错误:

new java.io.File()

当使用--js.java-package-globals=false 运行 shell 时,只需要这么多:

Java.type("java.io.File")

我该如何解决这个问题?如果应该提供这些功能,那么为什么它们不能开箱即用?

【问题讨论】:

    标签: javascript java graalvm graaljs


    【解决方案1】:

    我假设您缺少 --jvm 标志以在 Java 互操作所需的 jvm 模式下运行 js 启动器。

    $ ./graalvm-ee-java11-21.3.0/bin/js --eval 'new java.io.File(""); console.log("OK!")'
    TypeError: Access to host class java.io.File is not allowed or does not exist.
            at <js> :program(Unknown)
    
    $ ./graalvm-ee-java11-21.3.0/bin/js --jvm --eval 'new java.io.File(""); console.log("OK!")'
    OK!
    
    

    这是记录在here

    要启用 Java 互操作性,必须提供 --jvm 选项 到本机启动器

    【讨论】:

    • 那为什么Java.typejava 甚至会以原生模式提供呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    相关资源
    最近更新 更多