Java 8迁移Java 11后使用Ant 1.7.1报Jdk14RegexpRegexp类找不到如何解决
问题根因
你使用的Ant 1.7.1属于2008年发布的老旧版本,其默认绑定的正则匹配实现为org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp,该实现是针对JDK 1.4版本设计的。Java 9及以上版本引入了模块系统,对类加载逻辑做了大幅调整,老版本Ant的正则工厂类无法正常加载该JDK14适配的正则类,再加上你使用的ant-nodeps.jar是剥离了非核心依赖的精简Ant包,本身不携带其他备选正则实现,最终触发类NotFound异常。
可行解决方案
- 优先方案:升级Ant版本
直接将Ant升级到1.10.x及以上的正式稳定版,该版本系列已经完成了Java 11的全量兼容,默认正则实现已经适配高版本JDK的内置正则库,无需修改原有构建逻辑,替换对应版本的Ant依赖包即可解决问题。 - 兼容方案:不升级Ant版本的前提下调整依赖
首先在构建类路径中引入ant-apache-regexp.jar和Jakarta ORO正则依赖包,再给构建任务添加JVM启动参数:-Dant.regexp.regexpimpl=org.apache.tools.ant.util.regexp.JakartaOroRegexp,强制Ant使用ORO正则实现替代原有失效的JDK14正则实现。 - 临时救急方案
从Ant 1.7.1的完整安装包中提取org/apache/tools/ant/util/regexp/Jdk14RegexpRegexp.class文件,手动添加到你的构建类路径下,该方案仅适合临时验证使用,不建议长期生产环境使用。
注意:如果你自定义的
appReplaceRegExp任务中存在硬编码正则实现类的逻辑,需要同步删除硬编码配置,让Ant自动加载对应版本的适配实现。
内容的提问来源于stack exchange,提问作者Valsaraj Viswanathan
相关产品推荐
相关产品推荐

