Apache 德比 10.15.* - java.lang.ClassNotFoundException:org.apache.derby.jdbc.EmbeddedDriver

Apache Derby 10.15.* - java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver

在尝试使用 Apache Derby DB(又名 JavaDB,曾经是 JDK 的一部分)作为嵌入式内存数据库进行测试时,我遇到了 ClassNotFoundException 由 HikariCP 抛出的错误能够实例化 org.apache.derby.jdbc.EmbeddedDriver.

通过Maven建立的项目。 德比依赖是:

<dependency>
    <artifactId>derby</artifactId>
    <groupId>org.apache.derby</groupId>
    <version>10.15.2.0</version>
    <scope>test</scope>
</dependency>

HikariCP 配置为:

HikariConfig config = new HikariConfig();
config.setDriverClassName("org.apache.derby.jdbc.EmbeddedDriver");
config.setJdbcUrl("jdbc:derby:memory:TestsDB;create=true");
return new HikariDataSource(config);

很少有帖子提到 ClientDriver,但我确实需要 EmbeddedDriver 来进行内存中 JDBC 访问。

有什么想法吗?

显然从 Derby 版本 10.14.*10.15.* 版本发生了变化。

后者(我正在使用)确实在其 JAR 中没有这样的 class。

在源代码中进行一些搜索后,我发现 org.apache.derby.jdbc.EmbeddedDriver 已移至工具 JAR,因此请确保将以下依赖项也添加到您的 pom.xml 中:

<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derbytools</artifactId>
    <version>10.15.2.0</version>
    <scope>test</scope>
</dependency>

Note: of course, adjust the version of this artifact to be the same as the main one, whatever it is in your case.

致 Apache Derby 人员:如果此更改是完全有意的,我建议更改主要的 Derby 工件描述,它仍然误导性地指出“包含核心 Apache Derby 数据库引擎,其中还包括嵌入式 JDBC 驱动程序”(重点是我的 [YG])。