问题描述
我在 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 (将#修改为@)