From c74ea769a1c6079932443cef3cc6673068276962 Mon Sep 17 00:00:00 2001 From: OpenCode Date: Thu, 28 May 2026 07:27:13 +0000 Subject: [PATCH] Accept JS file as argument and support NPM modules via jvm-npm - HelloNashorn now takes a JS file path as command-line argument - Uses jvm-npm (org.bsc:jvm-npm-core:1.1.0) for require() support - Require.root set to script's parent dir so node_modules resolves correctly - Engine created with -scripting mode for load() support --- build.gradle | 1 + src/main/java/com/example/HelloNashorn.java | 25 +++++++++++++++------ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 08f523d..246353c 100644 --- a/build.gradle +++ b/build.gradle @@ -9,6 +9,7 @@ repositories { dependencies { implementation 'org.openjdk.nashorn:nashorn-core:15.6' + implementation 'org.bsc:jvm-npm-core:1.1.0' } application { diff --git a/src/main/java/com/example/HelloNashorn.java b/src/main/java/com/example/HelloNashorn.java index 9b439cd..c9251ff 100644 --- a/src/main/java/com/example/HelloNashorn.java +++ b/src/main/java/com/example/HelloNashorn.java @@ -3,18 +3,29 @@ package com.example; import org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory; import javax.script.ScriptEngine; +import java.io.File; public class HelloNashorn { public static void main(String[] args) throws Exception { + if (args.length == 0) { + System.err.println("Usage: HelloNashorn "); + System.exit(1); + } + + File scriptFile = new File(args[0]).getAbsoluteFile(); + if (!scriptFile.isFile()) { + System.err.println("File not found: " + args[0]); + System.exit(1); + } + NashornScriptEngineFactory factory = new NashornScriptEngineFactory(); - ScriptEngine engine = factory.getScriptEngine(); + ScriptEngine engine = factory.getScriptEngine("-scripting"); - engine.eval("print('Hello World from JavaScript!')"); + engine.put("__rootDir", scriptFile.getParent()); + engine.eval("load('classpath:jvm-npm.js')"); + engine.eval("Require.root = __rootDir"); - String result = (String) engine.eval( - "var greeting = 'Hello from Nashorn on JDK ' + java.lang.System.getProperty('java.version');" + - "greeting" - ); - System.out.println(result); + engine.put("__scriptFile", scriptFile.getAbsolutePath()); + engine.eval("load(__scriptFile)"); } }