【问题标题】:No suitable driver found when including the needed drivers with maven-assembly-plugin [duplicate]使用 maven-assembly-plugin 包含所需的驱动程序时找不到合适的驱动程序 [重复]
【发布时间】:2012-08-31 02:43:45
【问题描述】:

可能重复:
java error (No suitable driver found)

我也有一个非常小的,可以与 PostgreSQL 数据库一起使用,将它用作单个 jar 会非常方便。所以我确实尝试过像这样使用 maven-assembly-plugin:

<artifactId>maven-assembly-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>pack.name.MainClass</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>

它工作得非常好,我可以看到我需要添加到 jar 文件中的所有文件,包括驱动程序的文件,但是当我尝试运行它时,我得到一个:

java.sql.SQLException: No suitable driver found for jdbc:postgresql://<ip>:5432/dbname

我有这个:

<dependencies>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
        </dependency> 
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.1-901-1.jdbc4</version>
        </dependency>

在依赖项中,URL 和我上面写的完全一样(除了被审查的地址 :))。 我错过了什么?

谢谢!

【问题讨论】:

  • 您需要将该驱动程序添加到您的依赖项中
  • 驱动在依赖中...而且语法是正确的。
  • 你有Class.forName(...)来加载驱动吗?

标签: java postgresql maven jdbc jar


【解决方案1】:

如果您不使用Class.forName(...) 手动加载驱动程序,那么我认为您遇到了maven-assembly-plugin 的一个臭名昭著的问题 - 当它们来自不同的jars 时,它会覆盖具有相同名称的文件。

在您的情况下,JDBC 驱动程序发现机制依赖于一个名为 /META-INF/services/java.sql.Driver 的文件,并且您的依赖项(Oracle 和 Postgres 驱动程序)中至少有两个包含此类文件的 jars,因此其中一个在之后丢失运行maven-assembly-plugin

您可以使用maven-shade-plugin 而不是maven-assembly-plugin 来正确合并这些文件,如here 所述。

或者,您可以使用Class.forName(...) 来回避失败的自动发现机制。

【讨论】:

  • 谢谢,阴影插件做得很好。对于 maven-assembly-plugin 来说,这是一个重要的“已知问题”,我们可能会远离它......
猜你喜欢
  • 2014-02-09
  • 2016-04-02
  • 1970-01-01
  • 2018-07-09
  • 2011-08-24
  • 2014-01-31
  • 1970-01-01
相关资源
最近更新 更多