如何在Java 17中使用外部OpenJDK Nashorn引擎?
在Java 15+中使用外部OpenJDK Nashorn引擎
1. 添加Maven依赖
在项目的pom.xml中引入Nashorn核心依赖:
<dependency> <groupId>org.openjdk.nashorn</groupId> <artifactId>nashorn-core</artifactId> <version>15.0</version> </dependency>
2. 代码示例
示例1:基本执行JavaScript代码
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class NashornBasicExample { public static void main(String[] args) throws ScriptException { // 获取Nashorn脚本引擎 ScriptEngineManager engineManager = new ScriptEngineManager(); ScriptEngine nashornEngine = engineManager.getEngineByName("nashorn"); // 执行简单的JavaScript代码 String jsCode = "var message = 'Hello from Nashorn!'; message;"; Object result = nashornEngine.eval(jsCode); System.out.println(result); // 输出: Hello from Nashorn! } }
示例2:在JavaScript中调用Java类与方法
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class NashornJavaInteropExample { public static void main(String[] args) throws ScriptException { ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("nashorn"); // 在JS中调用Java静态方法 String jsCode = "Java.type('java.lang.Math').sqrt(16);"; Double sqrtResult = (Double) nashornEngine.eval(jsCode); System.out.println("Square root of 16: " + sqrtResult); // 输出: 4.0 // 在JS中实例化Java对象并调用方法 jsCode = "var arrayList = new Java.type('java.util.ArrayList')(); arrayList.add('Test'); arrayList.size();"; Integer size = (Integer) nashornEngine.eval(jsCode); System.out.println("ArrayList size: " + size); // 输出: 1 } }
示例3:向JavaScript环境传递Java对象参数
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class NashornPassObjectExample { public static void main(String[] args) throws ScriptException { ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("nashorn"); // 向JS引擎绑定Java对象 String javaMessage = "Message from Java"; nashornEngine.put("javaMsg", javaMessage); // 在JS中使用绑定的Java对象 String jsCode = "console.log('Received from Java: ' + javaMsg); 'Processed in JS';"; Object processedResult = nashornEngine.eval(jsCode); System.out.println(processedResult); // 输出: Processed in JS } }
内容的提问来源于stack exchange,提问作者Sandushi Dileka
相关产品推荐
相关产品推荐

