ANT是否支持JavaScript的Map?内嵌JS构建报错求解决
解决ANT内嵌JavaScript中
Map未定义的问题 这个问题我之前也碰到过,本质是你用的JS引擎版本太老啦!
问题根源
你放在ANT lib目录里的js.jar是旧版的Mozilla Rhino引擎,这个版本发布于ES6标准推出之前,完全不支持Map、Set这类ES6新增的特性,所以执行时才会抛出<eval>:15 ReferenceError: "Map" is not defined的错误。
两种可行的解决方案
方案1:升级Rhino引擎到支持ES6的版本
- 先删除ANT lib目录里的旧
js.jar - 下载新版Mozilla Rhino的jar包(目前最新版本已经全面支持ES6+特性,推荐版本1.7.14及以上)
- 将下载好的新版Rhino jar包放到ANT的lib目录中,重启ANT后就能正常使用
Map等ES6特性了
方案2:改用JDK自带的Nashorn引擎(仅限JDK8~JDK10)
如果你的项目使用的JDK版本是8到10之间,完全可以用JDK自带的Nashorn引擎——它天生支持ES6,而且不需要额外下载jar包:
- 首先可以移除ANT lib目录里的旧
js.jar(避免冲突) - 在你的ANT构建脚本(build.xml)中,使用
<script>标签时指定引擎为nashorn,示例代码如下:
<script language="javascript" engine="nashorn"> // 现在可以正常使用ES6的Map了 const myMap = new Map(); myMap.set('name', 'test'); println(myMap.get('name')); </script>
注意:JDK11及以上版本已经移除了Nashorn引擎,所以这个方案只适用于JDK8~10的环境。
额外注意事项
- 替换jar包后一定要重启ANT,确保新的引擎生效
- 如果使用新版Rhino,不需要替换
bsf.jar,它能和新版Rhino兼容 - 可以先写一个极简的测试脚本验证
Map是否可用,排除其他代码问题
内容的提问来源于stack exchange,提问作者user11215077
相关产品推荐
相关产品推荐

