例如,我安装了21版本,据我了解,我不能再使用Nashorn引擎了。
但也许 GraalVM 适合我?
我已经安装了所有必需的依赖项:
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js</artifactId>
<version>21.1.0</version>
</dependency>
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js-scriptengine</artifactId>
<version>21.1.0</version>
</dependency>
这是我尝试执行的一个简单示例:
public static void main(String[] args) throws ScriptException {
try (Context context = Context.newBuilder("js")
.allowAllAccess(true)
.build()) {
// Evaluate JavaScript code
String jsCode = "console.log('Hello, GraalVM!');";
context.eval("js", jsCode);
} catch (Exception e) {
throw new ScriptException("Script execution failed: " + e.getMessage());
}
}
但是,我收到错误:
线程“main”中的异常javax.script.ScriptException:脚本 执行失败:未安装 ID 为“js”的语言。已安装 语言有:[]。 在 org.example.Main.main(Main.java:23)
我也尝试过这样的事情:
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
engine.eval("print('HI');");
}
但是我遇到了另一个错误:
线程“main”中的异常 java.lang.NullPointerException:不能 调用“javax.script.ScriptEngine.eval(String)”,因为“engine”是 org.example.Main.main(Main.java:20) 为空
问题是由于某种原因无法手动安装任何组件。我只需要一些依赖项并使一切正常。一些“开箱即用”的东西。有解决这个问题的方法吗?也许还有其他可用的引擎?
谢谢大家。
├── pom.xml
├── README.txt
└── src
└── main
└── java
└── com
└── example
└── JsTest.java
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>js-engine-script</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>jsEngineScript</name>
<description>jsEngineScript App Project</description>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.openjdk.nashorn</groupId>
<artifactId>nashorn-core</artifactId>
<version>15.4</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<finalName>app</finalName>
</build>
</project>
package com.example;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class JsTest {
public static void main(String[] args) throws ScriptException {
try {
//ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
//ScriptEngine engine =new ScriptEngineManager().getEngineByName("JavaScript");
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
if (engine == null) {
System.out.println("Nashorn script engine not available.");
return;
}
engine.eval("print('HI');");
engine.eval("print('Hello, Nashorn!');");
engine.eval("var x = 10 + 20; print('x = ' + x);");
} catch (ScriptException e) {
e.printStackTrace();
}
}
}
mvn clean package
mvn dependency:copy-dependencies -DoutputDirectory=target/libs
java -cp "target/libs/*:target/app.jar" \
com.example.JsTest
结果:
HI
Hello, Nashorn!
x = 30