当前位置: 首页 > 知识库问答 >
问题:

如何在java应用程序中使用GraalVM SDK库?

宋高寒
2023-03-14

我不知道如何用GraalVM的SDK编译我的Java应用程序。我相信在使用GraalVMjavacbinary时,默认情况下会将它们添加到类路径中。

我的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构建的GraalVMjavac二进制文件:

$ 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

当深入挖掘时,我发现这些类包含在其中。jmod档案位于$JAVA_HOME/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

共有1个答案

施誉
2023-03-14

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

导入语句中有输入错误:polygot-

注意,我还添加了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
 类似资料:
  • 问题内容: 我已经从http://code.google.com/p/facebook-java- api/ 下载了facebook-java- api-3.0.2-bin 以连接到脸书。我想在我的Java应用程序中使用此api连接Facebook。我正在为此目的开发桌面应用程序。我已经在Face book上创建了帐户并注册为开发人员。 是否可以从我的Java应用程序连接Facebook? 如果是

  • 我用于处理和文件的一般java代码是: 我必须处理3.0版本的才能使用以下函数: parse-xml-fragment() 预期产出: 谁能提供一个解决方案吗?

  • 我尝试在JAVA代码中调用MessageBoxA函数。以下方法有什么问题,以至于我的程序抛出了很多错误? 1-st: run:线程“main”java.lang.ClassFormatError:java.lang.ClassLoader的类文件加载/库/MessageBox中的本机或抽象方法中的代码属性。java.lang.ClassLoader.defineClass(ClassLoader.

  • 问题内容: 我有一个Swing应用程序,我希望将其从意大利面条转换为对Guice使用依赖项注入。使用Guice提供诸如配置和任务队列之类的服务的过程非常好,但是我现在是从应用程序的GUI开始的,不确定如何进行。 该应用程序基本上是,在中带有一堆标签。每个选项卡都是一个单独的子类,该子类列出了各种组件,并且需要服务才能在按下某些按钮时执行操作。 在当前应用程序中,这看起来像这样: 显然,这并不完全遵

  • 我有Kafka Streams java应用程序启动并运行。我试图使用KSQL创建简单的查询,并使用Kafka流来实现复杂的解决方案。我希望将KSQL和Kafka流作为Java应用程序运行。 我打算通过https://github.com/confluentinc/ksql/blob/master/ksqldb-examples/src/main/java/io/confluent/ksql/em

  • 我正在用c开发一个应用程序,我想使用solr来索引sqlite数据库,我在网上搜索了一下,发现我需要使用JNI:http://randr . svbtle . com/experiment-with-embedded-Solr-in-Java-and-c,但是我发现jar有很多问题(我使用了\solr-4.9.0\dist\solrj-lib和\solr-4.9.0\dist和\solr-4.9.