You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么JUnit测试可正常创建嵌入式Derby DB,main方法调用却报错?

问题根因

你配置的org.apache.derby:derby依赖使用了<scope>test</scope>作用域,这是问题的核心诱因:

  • Maven中test作用域的依赖仅会在测试代码编译、JUnit测试运行两个阶段被加入类路径
  • 主程序main方法运行属于正式运行上下文,不会加载test作用域的依赖,因此找不到Derby核心类org.apache.derby.iapi.jdbc.JDBCBoot,触发类不存在异常。
    这个特性完全匹配你遇到的「JUnit运行正常、main方法运行失败」的现象。

解决方案

根据你的使用场景二选一即可:

  • 若主程序运行阶段确实需要用到嵌入式Derby,直接删除derby依赖的<scope>test</scope>配置,默认作用域会让该依赖在编译、运行、测试全阶段生效。
  • 若仅测试阶段需要用嵌入式Derby、主程序对接其他数据库,调整main方法逻辑,不要在主程序中调用Derby相关的初始化代码即可。

额外优化建议

你代码中手动注册Derby驱动的步骤是冗余的:JDBC4.0及以上版本会自动扫描classpath下META-INF/services/java.sql.Driver文件自动加载匹配的驱动,不需要手动实例化EmbeddedDriver再调用DriverManager.registerDriver()注册。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:36:00