【问题标题】:How do I use GraalVM SDK libraries with a java application?如何在 Java 应用程序中使用 GraalVM SDK 库?
【发布时间】:2020-10-31 17:02:44
【问题描述】:

我不知道如何使用 GraalVM 的 SDK 编译我的 Java 应用程序。我相信在使用 GraalVM javac 二进制文件时,它们会默认添加到类路径中。

我的 hello world 测试应用程序:

import java.io.File;
import org.graalvm.polygot.Source;
import org.graalvm.polygot.Context;

public class Application
{
    public static void main() {
        System.out.println("Hello, world");
    }
}

javac 输出:

$ javac Application.java
Application.java:2: error: package org.graalvm.polygot does not exist
import org.graalvm.polygot.Source;
                          ^
Application.java:3: error: package org.graalvm.polygot does not exist
import org.graalvm.polygot.Context;
                          ^
2 errors

我正在使用使用 OpenJDK 11 构建的 GraalVM javac 二进制文件:

$ java --version
openjdk 11.0.8 2020-07-14
OpenJDK Runtime Environment GraalVM CE 20.2.0 (build 11.0.8+10-jvmci-20.2-b03)
OpenJDK 64-Bit Server VM GraalVM CE 20.2.0 (build 11.0.8+10-jvmci-20.2-b03, mixed mode, sharing)

$ env | grep JAVA
JAVA_HOME=/home/matt/Software/graalvm-ce-java11-20.2.0

在深入挖掘时,我发现这些类包含在 $JAVA_HOME/jmod 的 .jmod 档案中:

$ jmod list org.graalvm.sdk.jmod | grep Source
classes/org/graalvm/polyglot/Source.class

$ jmod list org.graalvm.sdk.jmod | grep Context.class
classes/org/graalvm/polyglot/Context.class

【问题讨论】:

    标签: java graalvm


    【解决方案1】:

    这些类和包会自动进入类路径。

    您在导入语句中有错字:polygot -> polyglot

    请注意,我还添加了 String[] args 作为 main 方法的参数,因此它具有正确的签名并且可以运行。

    这是我编译/运行时的输出。

    ~/1 ~/.sdkman/candidates/java/20.2.0.r11-grl/bin/java -version
    openjdk version "11.0.8" 2020-07-14
    OpenJDK Runtime Environment GraalVM CE 20.2.0 (build 11.0.8+10-jvmci-20.2-b03)
    OpenJDK 64-Bit Server VM GraalVM CE 20.2.0 (build 11.0.8+10-jvmci-20.2-b03, mixed mode, sharing)
    
    ~/1 cat Application.java
    ───────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
           │ File: Application.java
    ───────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       1   │ import java.io.File;
       2   │ import org.graalvm.polyglot.Source;
       3   │ import org.graalvm.polyglot.Context;
       4   │
       5   │ public class Application
       6   │ {
       7   │     public static void main(String[] args) {
       8   │         System.out.println("Hello, world");
       9   │     }
      10   │ }
    ───────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
    
    ~/1 ~/.sdkman/candidates/java/20.2.0.r11-grl/bin/javac Application.java
    
    ~/1 ll
    total 8
    -rw-rw-r--. 1 opc opc 428 Nov  2 10:39 Application.class
    -rw-rw-r--. 1 opc opc 219 Nov  2 10:39 Application.java
    
    ~/1 ~/.sdkman/candidates/java/20.2.0.r11-grl/bin/java Application
    Hello, world
    ~/1
    

    【讨论】:

    • :facepalm: Kenn 盯着@Oleg!我会在回家后立即更正错字并将此答案标记为正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多