0

OpenJDK VM で Java 16 アプリケーションを実行しています。

実行時に、jar バイナリから Graal JS をロードする必要があります。

アプリケーションのスタートアップ フラグにアクセスできない、デフォルトのクラス ローダーを変更できない、Graal バイナリを jar にシェーディングできない、OpenJDK を GraalVM に変更できないことに注意してください。

https://docs.oracle.com/en/graalvm/enterprise/20/docs/reference-manual/js/RunOnJDK/によると

最小限のセットアップには、次のjarが必要です

graal-js-21.1.0.jar
graal-regex-21.1.0.jar
graal-sdk-21.1.0.jar
graal-truffle-api-21.1.0.jar
icu4j.jar

これらの jar は、maven central からローカル ファイルシステムにダウンロードされました。ここで、実行時にクラスパス内にクラスを追加する必要があります。

Java 16 より前は、URLClassloader#addUrl メソッドを使用できました。しかし、Java 16 では、エコシステムはモジュールのカプセル化に対してより厳密になり、これはもはやオプションではありません。

ModuleFinder moduleFinder = ModuleFinder.of(graalJarDir);
List<String> modules = moduleFinder
        .findAll()
        .stream()
        .map(ModuleReference::descriptor)
        .map(ModuleDescriptor::name)
        .collect(Collectors.toList());
Configuration pluginsConfiguration = ModuleLayer
        .boot()
        .configuration()
        .resolve(pluginsFinder, ModuleFinder.of(), modules);

私はJavaモジュールAPIを利用しようとしています。

ModuleFinder はディレクトリ内のすべての jar/モジュールを検出しますが、構成を解決しようとすると jvm がスローされます

モジュール org.graalvm.sdk が見つかりません。com.oracle.truffle.regex で必要です

4

0 に答える 0