0

0

了解JDK中的jrunscript命令_在Java环境中运行JavaScript脚本

P粉602998670

P粉602998670

发布时间:2026-03-02 10:33:11

|

443人浏览过

|

来源于php中文网

原创

jrunscript 因依赖的 nashorn 引擎在 jdk 11 被弃用、jdk 15 彻底移除而无人使用,仅限 jdk 8–11 且不支持 es6+、性能差、无调试;替代方案包括 graalvm context api、node.js 外调或 java 原生方法。

了解jdk中的jrunscript命令_在java环境中运行javascript脚本

为什么 jrunscript 现在基本没人用了

因为从 JDK 15 开始,jrunscript 就被彻底移除了。它依赖的 Nashorn 引擎早在 JDK 11 就被标记为 @Deprecated,JDK 14 正式废弃,JDK 15 直接删掉——不是“不推荐”,是“没这个命令了”。如果你在新项目里还想着用 jrunscript 跑 JS,第一步就得先确认 JDK 版本:java -version 输出是 11 或更低才可能有;14+ 肯定报 command not found

常见错误现象:jrunscript: command not found(Linux/macOS)或 'jrunscript' is not recognized(Windows),不是环境变量没配好,是它真没了。

  • 使用场景极窄:仅限 JDK 8–11 的运维脚本、临时调试、教学演示
  • 不支持 ES6+ 语法(比如 const、箭头函数、Promise),连 let 都会报错
  • 性能差,启动慢,无调试支持,也没办法加载外部 npm 包

jrunscript 在 JDK 8–11 中怎么跑最稳

它本质是个轻量级 REPL,不是 Node.js 替代品。想让它少出错,得盯住三个点:引擎选择、脚本路径、字符编码。

  • 默认用 Nashorn,但可显式指定:jrunscript -engine nashorn hello.js;如果装了 GraalVM,还能切到 -engine graal.js(需额外配置)
  • 脚本路径别用中文或空格,jrunscript -f ./test script.js 会失败——空格会被当参数分隔,必须写成 jrunscript -f "./test script.js"
  • Windows 上默认 GBK 编码,JS 文件若存为 UTF-8 无 BOM,中文字符串会乱码;加 -encoding UTF-8 参数才能读对
  • 交互模式下输入 JS 代码,回车即执行,但 function 声明后必须空一行再调用,否则解析失败

替代方案选哪个?看你要啥

真要从 Java 进程里跑 JS,别硬扛 jrunscript,直接换现代方案。

Shell脚本编写基础 中文WORD版
Shell脚本编写基础 中文WORD版

Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统

下载

立即学习Java免费学习笔记(深入)”;

  • 需要嵌入 JS 到 Java 应用?用 GraalVM 的 Context API:Context.create("js"),支持 ES2022、多线程、与 Java 对象互操作
  • 只是想执行一段 JS 做数据转换?用 node 外部调用更可靠:Runtime.getRuntime().exec("node script.js"),前提是服务器装了 Node
  • 纯本地快速验证?VS Code 装 JavaScript (ES6) 插件 + Code Runner,比开 JDK 环境快得多

注意:ScriptEngineManager + getEngineByName("nashorn") 在 JDK 15+ 同样失效,不是类找不到,是整个 jdk.scripting.nashorn 模块被删了。

遗留系统里遇到 jrunscript 报错,先查什么

老项目升级 JDK 后崩在 jrunscript 调用上,别急着重写,先定位是不是“表面问题”。

  • 检查是否误用了 -l(list engines)参数:JDK 11 下输出 nashorn,JDK 12+ 直接报 No ScriptEngineManager providers found
  • 脚本里用了 Java.type?这是 Nashorn 特有语法,Graal.js 里得改用 Java.type("java.util.ArrayList")Java.type("java.util.ArrayList")(看起来一样,但底层机制不同,部分泛型写法会挂)
  • 错误信息含 javax.script.ScriptException: TypeError?大概率是 JS 语法超出了 Nashorn 能力(如解构赋值),不是 Java 层的问题

最常被忽略的一点:有些构建脚本把 jrunscript 当作“跨平台 shell 替代品”来用,比如生成时间戳或拼接字符串——这种完全可以用 Java 的 String.formatInstant.now() 一行解决,没必要绑死 JS 引擎。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

106

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

196

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

231

2025.12.24

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

910

2023.08.02

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

866

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

453

2024.06.27

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

557

2023.09.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

658

2023.08.03

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

43

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 5.6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.2万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号