未找到模块 org.graalvm.sdk,com.oracle.truffle.regex 需要

问题描述

我在 OpenJDK VM 上运行了一个 java 16 应用程序。

在运行时我需要从 jar 二进制文件加载 Graal JS。

请注意,我无权访问应用程序的启动标志,我无法更改认类加载器,我无法将 graal 二进制文件隐藏到我的 jar 中,并且我无法将 OpenJDK 更改为 GraalVM。

根据https://docs.oracle.com/en/graalvm/enterprise/20/docs/reference-manual/js/RunOnJDK/

我需要以下 jars 来进行最少的设置

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

这些 jars 是从 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 找到目录中的所有 jars/modules,但是在尝试解析配置时 jvm 抛出

未找到模块 org.graalvm.sdk,com.oracle.truffle.regex 需要

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...