0

我尝试使用 GraalVM 的多语言代码扩展脚手架式 quarkus 演示https://code.quarkus.io/

@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
    String out = "From JS:";
    try (Context context = Context.create()) {
        Value function = context.eval("js", "x => x+1");
        assert function.canExecute();
        int x = function.execute(41).asInt();
        out=out+x;
        System.out.println(out);
    }
    return "hello";
}

我按照此处的建议向 pom.xml 添加了依赖项 [https://stackoverflow.com/questions/54384499/illegalstateexception-no-language-and-polyglot-implementation-was-found-on-the]

<dependency>
  <groupId>org.graalvm.js</groupId>
  <artifactId>js</artifactId>
  <version>20.1.0</version>
</dependency>
<dependency>
  <groupId>org.graalvm.js</groupId>
  <artifactId>js-scriptengine</artifactId>
  <version>20.1.0</version>
</dependency>
<dependency>
  <groupId>org.graalvm.truffle</groupId>
  <artifactId>truffle-api</artifactId>
  <version>20.1.0</version>
</dependency>

但是当我在 cmd 线上运行时

./mvnw clean package

测试失败但有异常,我不明白。

2020-06-22 19:26:56,328 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] 
(executor-thread-1) HTTP Request to /hello failed, error id: 996b0479-d836-47a5-bbcb-67bd876f9277-1: org.jboss.resteasy.spi.UnhandledException: 
java.lang.IllegalAccessError: superclass access check failed: 
class com.oracle.truffle.polyglot.PolyglotImpl (in unnamed module @0x7bf61ba2) cannot access class org.graalvm.polyglot.impl.AbstractPolyglotImpl (in module org.graalvm.sdk) 
because module org.graalvm.sdk does not export org.graalvm.polyglot.impl to unnamed module @0x7bf61ba2

更新:

它看起来像 quarkus 中的回归,https://github.com/quarkusio/quarkus/issues/10226。与 quarkus 1.2.1(而不是 1.5.2)一起使用时,应用程序测试通过。 在此处输入图像描述

4

2 回答 2

0

您是否可能在 GraalVM 19.3.1 上执行该操作?众所周知,这会混淆系统。我们强烈建议要么在 GraalVM 上运行(它会自动包含适当版本​​的 Graal.js,无需进一步输入),要么在 Stock JDK 上运行并从 Maven 导入相应的 JAR。如果您在 GraalVM 上从 maven 导入(不同版本的)我们的 Jars,那么您可能会遇到类似的冲突。

于 2020-06-23T11:49:26.163 回答
0

调查mvn dependency:tree- 事实证明,这org.graalvm.js:js:20.1.0取决于org.graalvm.sdk:graal-sdk:19.3.1。我个人称之为 GraalVM JS 错误。

如果您添加对 的显式依赖org.graalvm.sdk:graal-sdk:20.1.0,它应该可以工作。

(至少它对我有用,但我得到的错误与你不同,所以不确定。)

编辑:正如我在评论中被警告的那样org.graalvm.js:js:20.1.0取决于org.graalvm.sdk:graal-sdk:19.3.1. 取而代之的是,必须有其他东西迫使graal-sdk19.3.1也许是来自 Quarkus 的东西。明确地管理它20.1.0应该仍然有帮助。

于 2020-06-23T06:49:40.313 回答