You need to enable JavaScript to run this app. 已下载Maven依赖源码,为何HSQLDB堆栈跟踪仍显示Unknown Source?
优惠活动
大模型
产品
解决方案
定价
更多

已下载Maven依赖源码,为何HSQLDB堆栈跟踪仍显示Unknown Source?

问题描述

排查单元测试运行过程中出现的异常细节时,HSQLDB相关的堆栈跟踪片段全部显示为Unknown Source。
项目基于Maven构建,已下载对应依赖的源码与文档,IDE中也确认依赖的源码路径配置正确,但堆栈的提示状态没有任何改善。

实际捕获的异常堆栈如下:

Caused by: org.hsqldb.HsqlException: incompatible data type in operation
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.NumberSequence.setDefaults(Unknown Source)
at org.hsqldb.NumberSequence.<init>(Unknown Source)
at org.hsqldb.ParserTable.readColumnDefinitionOrNull(Unknown Source)
at org.hsqldb.ParserTable.readTableContentsSource(Unknown Source)
at org.hsqldb.ParserTable.compileCreateTableBody(Unknown Source)
at org.hsqldb.ParserTable.compileCreateTable(Unknown Source)
at org.hsqldb.ParserDDL.compileCreate(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatements(Unknown Source)
at org.hsqldb.Session.executeDirectStatement(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)

现象成因

  • 堆栈中出现Unknown Source的核心逻辑非常直白:Java生成堆栈跟踪时,需要从类的字节码中读取编译阶段写入的行号映射信息,若字节码中不存在对应调试元数据,就会自动标记为Unknown Source,该逻辑和IDE中是否挂载依赖源码无直接关联
  • 公开发布的HSQLDB正式版Jar包,在官方编译打包环节未开启全量调试行号信息的生成,无论IDE中配置多少源码路径,运行时执行的始终是这个不带行号信息的字节码,自然无法读取到对应行号
  • IDE挂载源码的作用仅为支持本地跳转查看类实现,不会反向将源码对应的行号信息补全到正在运行的字节码中,因此对堆栈的行号显示没有任何帮助

解决方向

  • 若确实需要带具体行号的HSQLDB堆栈辅助排查,可拉取对应版本的官方源码,使用javac -g参数开启全量调试信息编译后,替换本地Maven仓库中的对应官方Jar包
  • 就当前捕获的异常而言,无需依赖堆栈行号即可完成定位:
    • 异常本身提示操作中存在不兼容的数据类型,结合堆栈触发位置为建表阶段的列定义解析环节,可直接检查测试脚本中的建表语句,排查是否存在HSQLDB不兼容的自增序列定义、字段长度配置超限等写法
    • 核对当前使用的HSQLDB版本与ORM框架(如MyBatis、JPA)生成的建表语法的匹配度,高版本HSQLDB收紧了数据类型的校验规则,老版本适配的建表语句直接运行就可能触发该异常

内容的提问来源于stack exchange,提问作者sproketboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 17:36:04