赞
踩
在参与开发的Java工程中,有使用Nashorn引擎执行外部JS代码的业务。Nashorn引擎已经过时了,Oracle新退出的GraalVM具备在Java工程中执行JS代码的能力,所以打算在本地搭建GraalVM环境并运行相关示例代码。
Windows 10操作系统
进入官网的下载页面(https://www.graalvm.org/downloads/#),选择相应的版本,开始下载。这种途径下载的是企业版,需要下载社区版的话可在github上下载(https://github.com/graalvm/graalvm-ce-builds/releases/)。
解压下载下来的zip压缩包,然后配环境变量,和Java配的方法一样,起名起JAVA_HOME就行。
执行java -version
,验证GraalVM是否生效
在最新版本的GraalVM中,默认不配套JS组件。如果要实现Java工程中执行JS代码,需要自行下载JS组件。
根据官方文档(https://www.graalvm.org/latest/reference-manual/js/),可以使用GraalVM的命令行工具gu
来安装。但实操发现这种方式由于网络原因无法成功安装。所以需要通过手工安装的方式来完成JS等组件的安装。手工安装包名称形如xxx-installable-xxx.jar
下载JS组件(https://github.com/oracle/graaljs/releases)。
下载相关依赖。安装JS组件依赖ICU4J和TRegex两个组件,可以在github的社区版GraalVM发布仓库中找到(https://github.com/graalvm/graalvm-ce-builds/releases/)。
安装上述所有组件,并查看安装结果。若能成功看到安装的组件,证明安装成功。
- PS C:\Program Files\Java\graalvm-jdk-20.0.2+9.1> .\bin\gu.cmd install -L .\icu4j-installable-ce-java20-windows-amd64-23.0.1.jar
- Processing Component archive: .\icu4j-installable-ce-java20-windows-amd64-23.0.1.jar
- Installing new component: ICU4J (org.graalvm.icu4j, version 23.0.1)
-
- PS C:\Program Files\Java\graalvm-jdk-20.0.2+9.1> .\bin\gu.cmd install -L .\regex-installable-ce-java20-windows-amd64-23.0.1.jar
- Processing Component archive: .\regex-installable-ce-java20-windows-amd64-23.0.1.jar
- Installing new component: TRegex (org.graalvm.regex, version 23.0.1)
-
- PS C:\Program Files\Java\graalvm-jdk-20.0.2+9.1> .\bin\gu.cmd install -L .\js-installable-svm-java20-windows-amd64-23.0.1.jar
- Processing Component archive: .\js-installable-svm-java20-windows-amd64-23.0.1.jar
- Installing new component: Graal.js (org.graalvm.js, version 23.0.1)
-
- PS C:\Program Files\Java\graalvm-jdk-20.0.2+9.1> .\bin\gu.cmd list
- ComponentId Version Component name Stability Origin
- ---------------------------------------------------------------------------------------------------------------------------------
- graalvm 23.0.1 GraalVM Core Supported
- icu4j 23.0.1 ICU4J Supported
- js 23.0.1 Graal.js Supported
- native-image 23.0.1 Native Image Early adopter
- regex 23.0.1 TRegex Supported
配置项目使用的JDK为GraalVM对应的JDK,并选择对应的Java版本
运行示例代码
- @Test
- public void testConsoleOutput() {
- try (Engine engine = Engine.newBuilder().build()) {
- try (Context ctx = Context.newBuilder("js").engine(engine).build()) {
- ctx.eval("js", "for(let i = 0; i < 10; i++) {console.log(i);}");
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。