Ant执行deploy.xml时出现TypeError:无法加载ZipFileSet类
问题分析与修复
错误根源
你在Java 8分支里用错了方法:load()是用来加载外部脚本文件的,根本不是用来导入Java类的,这直接导致了TypeError: Cannot load script from Packages.org.apache.tools.ant.types.ZipFileSet报错。
为什么之前正常?
两周前能运行,大概率是当时你的JDK版本不是1.8.0,脚本走到了else分支,用importClass正确导入了类;现在环境切换到Java 8,触发了错误的load()逻辑。
修复后的脚本
针对Ant 1.9.4和不同JDK版本的引擎差异(Java8用Nashorn,Java7及以下用Rhino),修改脚本如下:
<script language="javascript"><![CDATA[ var version = java.lang.System.getProperty("java.version"); var ZipFileSet, Zip; if (version.startsWith("1.8.0")) { // Java8+的Nashorn引擎用Java.type获取类引用 ZipFileSet = Java.type("org.apache.tools.ant.types.ZipFileSet"); Zip = Java.type("org.apache.tools.ant.taskdefs.Zip"); } else { // Java7及以下的Rhino引擎用importClass importClass(Packages.org.apache.tools.ant.types.ZipFileSet); importClass(Packages.org.apache.tools.ant.taskdefs.Zip); } ]]></script>
补充说明
Ant 1.9.4在Java 8环境下,javascript脚本默认切换为Nashorn引擎,这个引擎不支持Rhino的importClass语法,同时也不允许用load()加载Java类,必须通过Java.type()来获取对应的类对象。
内容的提问来源于stack exchange,提问作者man like dave
相关产品推荐
相关产品推荐

