【问题标题】:How to use GraalVM in Java? class not found exception如何在 Java 中使用 GraalVM?类未找到异常
【发布时间】:2019-07-25 23:49:50
【问题描述】:

我想让这个例子工作:https://github.com/graalvm/graal-js-jdk11-maven-demo/blob/master/src/main/java/com/mycompany/app/App.java

但我在线程“main”java.lang.NoClassDefFoundError: jdk/vm/ci/services/Services 中遇到异常

我通过 Maven 包含了 GraalVM

在这个最小的例子中抛出了同样的异常

import org.graalvm.polyglot.Context;

public class Main {
    public static void main(String[] args) {
        Context context = Context.create("js");
        context.eval("js", "console.log('Hello from Earth')");
    }
}

绒球

<dependencies>
  <!-- https://mvnrepository.com/artifact/org.graalvm.sdk/graal-sdk -->
<dependency>
<groupId>org.graalvm.sdk</groupId>
<artifactId>graal-sdk</artifactId>
<version>19.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.graalvm.js/js -->
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js</artifactId>
<version>19.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.graalvm.js/js-scriptengine -->
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js-scriptengine</artifactId>
<version>19.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.graalvm.compiler/compiler -->
<dependency>
<groupId>org.graalvm.compiler</groupId>
<artifactId>compiler</artifactId>
<version>19.1.1</version>
</dependency>
</dependencies>

我正在使用 jdk-12.0.1 (Open JDK) 并在 Windows 10 计算机上工作。

我在互联网上的某个地方发现了这个

 -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler

应作为 VM 参数包含在内。当我这样做时,异常更改为:

线程“主”java.lang.IllegalAccessError 中的异常:类 org.graalvm.compiler.truffle.runtime.hotspot.AbstractHotSpotTruffleRuntimeAccess(在未命名的模块 @0x2d8e6db6 中)无法访问类 jdk.vm.ci.services.Services(在模块 jdk.internal.vm.ci) 因为模块 jdk.internal.vm.ci 不会将 jdk.vm.ci.services 导出到未命名模块 @0x2d8e6db6

可能是模块有问题:modules-info.java

module App {
exports testinggraal;

requires org.graalvm.sdk;
requires java.scripting;
requires org.graalvm.truffle;
requires org.graalvm.js;
 }

【问题讨论】:

    标签: javascript java graalvm


    【解决方案1】:

    我是https://github.com/graalvm/graal-js-jdk11-maven-demo 的作者,我对此进行了调查,似乎问题在于配置文件设置为与 JDK11 一起使用。

    如果您将以下补丁应用到 graal-js-jdk11-maven-demo 的 pom 文件,它也应该适用于 JDK12(如 https://travis-ci.org/graalvm/graal-js-jdk11-maven-demo/jobs/564052535 所示)

    diff --git a/pom.xml b/pom.xml
    index e2a76c1..95cfa2c 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -15,7 +15,7 @@
         <profile>
             <id>jdk11</id>
             <activation>
    -                <jdk>11</jdk>
    +                <jdk>[11,</jdk>
             </activation>
             <dependencies>
                 <dependency>
    

    【讨论】:

    • 确认它工作正常。所以我想知道为什么你需要在 pom.xml 中有jdk8 的配置文件。如果我删除它,maven 将无法再解析Context 类,即使如此它也应该只使用jdk12 的配置文件。此外,maven-compiler-plugin 中的sourcetarget 级别应更改为12。
    • jdk8 配置文件适用于当前基于 JDK 8 的 GraalVM。
    • 我仍然遇到同样的错误。我想知道使用 Maven 包含 graalvm 与将 JAVA_HOME 指向 graalvm 之间的区别。我正在使用 Windows 10。
    • 刚刚检查过,在 Windows 10 上运行 mvn package 也适用于我,使用 openjdk version "12.0.2" 2019-07-16 并应用上面的补丁。
    • 谢谢鲍里斯。也许我使用的 modules-info.java 有问题?
    猜你喜欢
    • 1970-01-01
    • 2015-06-23
    • 2021-04-14
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多