写在前面
工作中遇到了这样的需求,其中一个功能点的实现库是通过js代码封装的(历史原因)
,所以这里把相关的内容分享出来,以备后续使用的同时也希望能帮助到有类似需求的你
。
1:JDK 8~14
jdk自带功能不需要额外引入依赖,代码如下:
package org.example;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class JsExample {
public static void main(String[] args) {
// 创建脚本引擎管理器
ScriptEngineManager manager = new ScriptEngineManager();
// 获取 JavaScript 引擎
ScriptEngine engine = manager.getEngineByName("javascript");
try {
// 执行简单的 JavaScript 代码
engine.eval("print('Hello from JavaScript!')");
// 在 JavaScript 中定义函数
engine.eval("function add(a, b) { return a + b; }");
// 调用 JavaScript 函数
Double result = (Double) engine.eval("add(5, 7);");
System.out.println("5 + 7 = " + result);
// 传递 Java 对象到 JavaScript
engine.put("name", "John Doe");
engine.eval("print('Hello, ' + name)");
} catch (ScriptException e) {
e.printStackTrace();
}
}
}
运行:
[INFO] --- exec:3.5.0:exec (default-cli) @ untitled8 ---
Hello from JavaScript!
5 + 7 = 12.0
Hello, John Doe
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
1:JDK 15+
我本地测试使用的是jdk21。
pom:
<dependencies>
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js-scriptengine</artifactId>
<version>23.0.7</version> <!-- 使用最新版本 -->
</dependency>
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js</artifactId>
<version>23.0.7</version> <!-- 使用最新版本 -->
</dependency>
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js-scriptengine</artifactId>
<version>23.0.7</version>
</dependency>
</dependencies>
测试代码:
package org.example;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class JsExample {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("graal.js"); // 使用 "graal.js" 而不是 "javascript"
if (engine == null) {
throw new RuntimeException("GraalVM JS engine not found. Did you add the dependency?");
}
engine.eval("print('Hello from GraalVM JavaScript!')");
Object result = engine.eval("2 + 3 * 4");
System.out.println("Result: " + result); // 输出 14
}
}
运行:
Hello from GraalVM JavaScript!
Result: 14
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------