You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Nashorn API实现Java调用JS模块遇Gradle弃用警告及执行失败

问题排查与解决方案

一、先定位当前执行失败的具体原因

你目前仅看到进程退出码1,但缺乏具体错误堆栈,无法确定问题根源。先执行以下Gradle命令获取详细日志:

./gradlew Main.main() --stacktrace

或获取更完整的调试日志:

./gradlew Main.main() --debug

拿到具体错误信息后,才能判断是依赖缺失、JVM参数问题还是代码逻辑错误——你更换三种JS引擎都出现问题,大概率不是引擎本身的问题,而是项目配置或代码中的其他问题。

二、无弃用警告的Gradle+JavaScript方案(Graal.js)

Graal.js是官方推荐的Nashorn替代方案,无弃用警告且性能更优,在Gradle项目中可按以下方式配置:

1. Gradle依赖配置

Kotlin DSL(build.gradle.kts)

dependencies {
    implementation("org.graalvm.js:js:23.0.2")
    implementation("org.graalvm.js:js-scriptengine:23.0.2")
}

Groovy DSL(build.gradle)

dependencies {
    implementation 'org.graalvm.js:js:23.0.2'
    implementation 'org.graalvm.js:js-scriptengine:23.0.2'
}

注意:请选用与你的JVM版本兼容的Graal.js版本,例如OpenJDK 19可搭配GraalVM 23.x系列版本。

2. Java代码示例

使用Graal.js的ScriptEngine调用JavaScript代码:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class Main {
    public static void main(String[] args) throws ScriptException {
        ScriptEngineManager manager = new ScriptEngineManager();
        // 获取Graal.js引擎实例
        ScriptEngine engine = manager.getEngineByName("graal.js");
        // 执行JavaScript代码
        engine.eval("print('Hello from Graal.js!')");
    }
}

3. 额外注意事项

  • 若项目使用GraalVM作为JVM,可启用GraalVM的AOT编译进一步优化性能;普通OpenJDK环境也能正常运行Graal.js。
  • 确保Gradle的JVM配置统一,避免混用不同版本的JDK。

内容的提问来源于stack exchange,提问作者Swiftness

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:50:19