问题描述
我不知道如何使用GraalVM的SDK编译Java应用程序。我相信使用GraalVM javac
二进制文件时,默认情况下会将它们添加到类路径中。
我的世界测试应用程序:
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
解决方法
这些类和包自动进入类路径。
您在导入语句中有一个错字: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