运行Jar包时出现java.util.regex.Matcher.results()相关NoSuchMethodError
问题根因
你遇到的NoSuchMethodError和依赖缺失无关,核心原因是JDK版本不兼容:
java.util.regex.Matcher.results()是JDK 9才正式加入的API,JDK 8及更低版本完全没有该方法- 你的Eclipse IDE中项目配置的编译、运行环境为JDK 9+,因此代码可以正常运行;但导出Jar包后,运行Jar的环境使用的是JDK 8或更低版本,就会抛出方法找不到的错误
验证方法
1. 核对两端Java版本
- 查看Eclipse项目的JDK配置:进入
项目属性 > Java Build Path > Libraries确认JRE版本,再切换到Java Compiler页面查看编译兼容级别 - 查看Jar运行环境的Java版本:在运行Jar的终端执行命令
java -version,对比版本是否低于Eclipse使用的JDK版本
2. 校验Jar包的编译版本
可以通过JDK自带工具直接检查Jar内类文件的编译兼容级别,确认打包时是否被降级:
- 执行命令:
javap -verbose -classpath 你的Jar包完整路径 SalesToExcel | grep "major version" - 版本号对应关系:
- 52 = JDK 8
- 53 = JDK 9
- 54 = JDK 10
- 更高版本号依次对应更高JDK版本
如果查询到的版本号≥53,说明编译使用的是JDK9+,只要运行环境版本匹配就不会出现该错误。
3. 检查打包配置
导出Jar时确认Eclipse导出向导中没有选择低版本JRE兼容选项,打包所用的JDK版本要和项目开发所用版本保持一致。
解决方案
- 方案1:将运行Jar的环境升级到JDK 9或更高版本
- 方案2:如果需要兼容JDK 8,修改代码将
Matcher.results()的流式调用替换为JDK 8支持的遍历写法,用while循环调用matcher.find()处理匹配结果即可
内容的提问来源于stack exchange,提问作者Nick Green
相关产品推荐
相关产品推荐

