导出到 JAR 文件时找不到合适的驱动程序?

No suitable driver found when exporting to a JAR-file?

我正在尝试将我的项目放入 JAR 中,以便我可以 运行 它作为 CLI。 我有两个正在使用的 JDBC 连接器,一个用于 MySQL 一个用于 PostgreSQL。两者都位于同一目录中,如果我 运行 它们在 IDE 中,则可以正常工作。 当我创建 JAR 时,MySQL 连接器仍然工作正常,但是当尝试建立与 PostgreSQL 的连接时,出现以下错误。 真正让我恼火的是连接器似乎包含在 jar 的构建中。 MySQL 连接器和 PostgreSQL 连接器都在构建中列出。 我该如何解决这个问题?

问题是所有 JDBC-4 兼容的 JDBC 驱动程序都包含一个文件 /META-INF/services/java.sql.Driver,其中列出了 JAR 文件中的 java.sql.Driver 实现。 java.sql.DriverManager 使用它来加载可用的 JDBC 驱动程序。

您用于合并的过程显然不会将驱动程序中的不同文件合并到一个文件中,因此它只有一个驱动程序的内容。因此,不会自动加载其他驱动程序。

可能的解决方案:

  1. 不要将 JAR 文件合并到一个 JAR 中,而是使用 META-INF/MANIFEST.MFClass-Path 属性来指定您使用的 JAR,并使用 java -jar your.jar
  2. 确保 META-INF/services/java.sql.Driver 正确合并(或者可能提供您自己的合并),这取决于您的合并方式,可能会有一个选项来配置需要合并的文件
  3. 使用 Class.forName("com.mysql.cj.jdbc.Driver")Class.forName("org.postgresql.Driver") 显式加载驱动程序(如果合并文件的顺序发生变化,并且另一个文件获胜,则两者都这样做以防止出现问题)