生成ExtJS 6.5 Web应用时遇javax/xml/bind/DatatypeConverter错误的解决方法
解决Java 9.0.4 + Sencha ExtJS 6.5.3.6生成应用时的
javax/xml/bind/DatatypeConverter错误 这个问题我之前帮朋友排查过,本质是Java 9的模块化系统改动坑了旧版本的Sencha工具——从Java 9开始,JAXB(XML绑定相关的类库)不再是JDK核心默认包含的模块了,而Sencha ExtJS 6.5.3.6的构建工具还依赖这个类库,所以运行时会抛出找不到类的错误。下面给你几个靠谱的修复方案:
方案1:给Sencha命令添加JVM参数
直接在执行Sencha生成命令时,加上指定加载JAXB模块的参数,具体操作如下:
假设你原来的生成命令是:
sencha app generate MyApp ./Desktop/MyApp
修改为:
sencha -J--add-modules=java.xml.bind app generate MyApp ./Desktop/MyApp
-J是Sencha命令传递JVM参数的前缀,--add-modules=java.xml.bind会告诉JVM加载缺失的JAXB模块,这样就能找到DatatypeConverter类了。
方案2:切换到Java 8环境
如果你的项目没有必须用Java 9的需求,最省心的办法就是切换回Java 8。因为Java 8中JAXB是核心类库的一部分,Sencha ExtJS 6.5.3.6的工具对Java 8的兼容性完全没问题,不需要任何额外配置就能正常生成应用。
你可以通过以下步骤切换:
- 下载安装对应系统版本的Java 8
- 配置环境变量
JAVA_HOME指向Java 8的安装目录 - 验证:在终端执行
java -version,确认显示的是Java 8版本后,再重新运行Sencha生成命令
方案3:手动添加JAXB依赖包(不推荐,较繁琐)
如果一定要用Java 9,也可以手动下载JAXB的相关jar包,添加到Sencha工具的类路径中:
- 下载
jaxb-api.jar、jaxb-core.jar、jaxb-impl.jar这几个核心包 - 找到Sencha Cmd的安装目录,把这些jar包放到
lib目录下 - 重新运行生成命令
不过这个方法容易出现版本兼容问题,不如前两个方案稳妥。
内容的提问来源于stack exchange,提问作者Fiyaz Hasan
相关产品推荐
相关产品推荐

