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

Extjs构建遇JavaScript脚本引擎创建失败,求非JDK降级解决方案

解决Sencha应用构建时"Unable to create javax script engine for javascript"错误的方案

方案一:统一引入独立Nashorn引擎依赖

既然单个build.xml添加依赖能正常运行,多个build.xml可以这么统一配置:

  • 把nashorn-core-15.4.jar、asm-9.4.jar、asm-util-9.4.jar、asm-commons-9.4.jar放到项目根目录下的公共lib文件夹(比如命名为shared-libs)
  • 在项目根级的build.xml里,用<path>标签统一声明这些依赖:
<path id="nashorn.classpath">
    <fileset dir="${shared-libs}" includes="nashorn-core-15.4.jar,asm-*.jar"/>
</path>
  • 所有子build.xml里,要么通过<import>导入根级build.xml的配置(路径根据实际层级调整),要么直接引用这个公共classpath:
    导入示例:
<import file="../root-build.xml"/>

使用<script>任务时指定classpathref:

<script language="javascript" classpathref="nashorn.classpath">
    <!-- 脚本内容 -->
</script>
  • 要是Sencha自带的配置build.xml没法修改,直接用Ant命令的-lib参数指定公共lib目录,所有Ant任务会自动加载依赖:
ant -lib ./shared-libs build

方案二:集成GraalVM替代脚本引擎

不想用Nashorn的话,用GraalVM的步骤如下:

  1. 下载对应操作系统的GraalVM安装包,确保包含JavaScript运行时
  2. 设置环境变量:把GraalVM的bin目录加到系统PATH,同时将JAVA_HOME指向GraalVM的安装目录
  3. 安装GraalVM的JavaScript扩展(默认没装的话执行这条命令):
gu install js
  1. 构建时,要么直接执行Ant命令添加JVM参数指定引擎:
ant -Djavax.script.ScriptEngineManager=org.graalvm.js.scriptengine.GraalScriptEngineFactory build

要么在build.xml里全局配置JVM参数:

<jvmarg value="-Djavax.script.ScriptEngineManager=org.graalvm.js.scriptengine.GraalScriptEngineFactory"/>

这样Ant的<script>标签会自动使用GraalVM的JavaScript引擎。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:03:06