找不到适合 jdbc:firebirdsql://localhost:3050 的驱动程序
No suitable driver found for jdbc:firebirdsql://localhost:3050
我使用 jaybird 依赖构建了一个 javafx maven 应用程序。 intelliJ 的每件事都很好。
当我导出 jar 文件时,我收到此消息:
No suitable driver found for jdbc:firebirdsql://localhost:3050...
这是 pom.xml 的依赖部分:
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>16</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>16</version>
</dependency>
<dependency>
<groupId>org.firebirdsql.jdbc</groupId>
<artifactId>jaybird-jdk16</artifactId>
<version>2.2.14</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.5.0</version>
</dependency>
</dependencies>
解决方法是:
右键单击 jaybird 依赖项(如图所示),然后单击 Extract into output root 然后重建工件 jar。
发生此错误的正常原因是您的类路径上没有 Jaybird(Firebird JDBC 驱动程序)或其所需的依赖项之一,或者驱动程序未注册。驱动程序注册通常会自动进行,但您始终可以尝试使用 Class.forName("org.firebirdsql.jdbc.FBDriver")
显式地进行注册。如果失败,您将获得提供更多信息的堆栈跟踪。
鉴于您展示了一个包含 Jaybird(尽管是旧版本)的 Maven pom.xml,驱动程序在编译时存在。但是,根据您启动应用程序的方式,它可能不会出现在运行时类路径中。
有几种选择:
加载时显式指定驱动Java:
java -cp yourapp.jar;jaybird-4.0.3.java8.jar;connector-api-1.5.jar your.class.Name
此处,Jaybird 需要 jaybird-4.0.3.java8.jar
和 connector-api-1.5.jar
才能工作。
在您的 JAR manifest 的 Class-Path
条目中列出所需的 JAR(jaybird-4.0.3.java8.jar
和 connector-api-1.5.jar
):
Class-Path: jaybird-4.0.3.java8.jar connector-api-1.5.jar
这两个 jar 文件都需要与您的 JAR 位于同一目录中。然后您可以启动您的应用程序(假设还指定了 Main-Class
属性):
java -jar yourapp.jar
创建一个胖(或超级)JAR,并确保 Jaybird 的所有 类 和资源 - 及其所需的依赖项 - 都包含在你的 JAR 中。
(Web 应用程序)将驱动程序(和依赖项)包含在应用程序服务器的 libraries/modules 中(例如 Tomcat lib
文件夹),或者使确保驱动程序包含在 WAR 的 WEB-INF/lib
文件夹中(Maven WAR 插件会处理这个)。在最后一种情况下(WEB-INF/lib
中的驱动程序),有必要使用 Class.forName("org.firebirdsql.jdbc.FBDriver")
显式加载驱动程序以确保驱动程序已注册。
我使用 jaybird 依赖构建了一个 javafx maven 应用程序。 intelliJ 的每件事都很好。 当我导出 jar 文件时,我收到此消息:
No suitable driver found for jdbc:firebirdsql://localhost:3050...
这是 pom.xml 的依赖部分:
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>16</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>16</version>
</dependency>
<dependency>
<groupId>org.firebirdsql.jdbc</groupId>
<artifactId>jaybird-jdk16</artifactId>
<version>2.2.14</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.5.0</version>
</dependency>
</dependencies>
解决方法是:
右键单击 jaybird 依赖项(如图所示),然后单击 Extract into output root 然后重建工件 jar。
发生此错误的正常原因是您的类路径上没有 Jaybird(Firebird JDBC 驱动程序)或其所需的依赖项之一,或者驱动程序未注册。驱动程序注册通常会自动进行,但您始终可以尝试使用 Class.forName("org.firebirdsql.jdbc.FBDriver")
显式地进行注册。如果失败,您将获得提供更多信息的堆栈跟踪。
鉴于您展示了一个包含 Jaybird(尽管是旧版本)的 Maven pom.xml,驱动程序在编译时存在。但是,根据您启动应用程序的方式,它可能不会出现在运行时类路径中。
有几种选择:
加载时显式指定驱动Java:
java -cp yourapp.jar;jaybird-4.0.3.java8.jar;connector-api-1.5.jar your.class.Name
此处,Jaybird 需要
jaybird-4.0.3.java8.jar
和connector-api-1.5.jar
才能工作。在您的 JAR manifest 的
Class-Path
条目中列出所需的 JAR(jaybird-4.0.3.java8.jar
和connector-api-1.5.jar
):Class-Path: jaybird-4.0.3.java8.jar connector-api-1.5.jar
这两个 jar 文件都需要与您的 JAR 位于同一目录中。然后您可以启动您的应用程序(假设还指定了
Main-Class
属性):java -jar yourapp.jar
创建一个胖(或超级)JAR,并确保 Jaybird 的所有 类 和资源 - 及其所需的依赖项 - 都包含在你的 JAR 中。
(Web 应用程序)将驱动程序(和依赖项)包含在应用程序服务器的 libraries/modules 中(例如 Tomcat
lib
文件夹),或者使确保驱动程序包含在 WAR 的WEB-INF/lib
文件夹中(Maven WAR 插件会处理这个)。在最后一种情况下(WEB-INF/lib
中的驱动程序),有必要使用Class.forName("org.firebirdsql.jdbc.FBDriver")
显式加载驱动程序以确保驱动程序已注册。