我正在开发一个需要执行JavaScript的Java应用程序。Nashorn引擎即将被废弃,取而代之的是使用GraalVM的GraalVM提供的一组API。本质上执行多种语言的虚拟机。
至少我是这么想的。所以我花了一天的时间试着让它起作用。我下载了使用JDK 8的GraalVM rc6,使用了IntelliJ IDEA,并添加了GraalVM作为新的JDK。我觉得奇怪的是,我应该添加一个虚拟机作为开发工具包,但我知道它是基于JDK 8的,所以我对它很满意。
而问题是不像其他人,我无法使新的软件包工作。我的IDE告诉我它不能解决这些问题。
实际上,没有一个org.graalvm包能够被解析。
所以我下载了JDK11Build28,因为据我所知,JDK 11从构建20开始就带有GraalVM。
实际上,在这种情况下,可以找到一些包,但比预期的要少得多:例如,org.graalvm.polyglot仍然无法解决。
最后,我尝试从Maven中添加Graal,并且解决了这些包。现在,我在运行时得到了一个异常:
Context ctx = Context.create(“js”);
在类路径上没有语言和多个标记的实现。确保松露-api.jar在类路径上。
我认为前两种情况下的问题实际上是没有获得GraalVM JDK,但即使是这样也会抛出异常。
有经验的人能解释这件事吗?
发布于 2018-09-06 09:17:36
GraalVM
GraalVM是一种高性能的可嵌入多标记虚拟机,目前支持多种编程语言: Java (和JVM语言)、JavaScript (包括node.js)、Ruby、Python和C/C++以及其他带有LLVM后端的语言。
您可以在这里下载GraalVM的预构建发行版: https://www.graalvm.org/downloads 。除其他外,它还包括java运行时、节点运行时、名为Graal.js的Graal.js引擎等。
Graal
是允许GraalVM与它可以运行的所有语言实现一起工作的polyglot。这个polyglot API被打包为一个jar文件:
$GRAALVM_HOME/jre/lib/boot/graal-sdk.jar
。
将该文件作为外部库添加到IDEA项目/模块中,将允许IDE找到与语言(包括
org.graalvm.polyglot.Context
实现)进行互操作所必需的类:
org.graalvm.polyglot.Value
和
org.graalvm.polyglot.Value
。
如果您的项目正在使用Maven,您可以在该文件上添加一个系统依赖项,并且maven将在
$JAVA_HOME
设置为指向GraalVM发行版的任何系统上找到它。
<dependency>
<groupId>org.graalvm</groupId>
<artifactId>graal-sdk</artifactId>
<version>1.0.0-rc</version>
<scope>system</scope>
<systemPath>${java.home}/lib/boot/graal-sdk.jar</systemPath>
</dependency>
现在,当您从
java
发行版运行GraalVM命令时,所需的文件将自动添加到类路径中。因此,在IDE中运行类似于以下内容并不需要更多的东西:
import org.graalvm.polyglot.*;
public class Main {
![]() |
文雅的火锅 · 从技术中心主义到人本主义:智慧城市研究进展与展望 1 周前 |