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的步骤如下:
- 下载对应操作系统的GraalVM安装包,确保包含JavaScript运行时
- 设置环境变量:把GraalVM的
bin目录加到系统PATH,同时将JAVA_HOME指向GraalVM的安装目录 - 安装GraalVM的JavaScript扩展(默认没装的话执行这条命令):
gu install js
- 构建时,要么直接执行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
相关产品推荐
相关产品推荐

