使用maven-assembly-plugin包含所需的驱动程序时找不到合适的驱动程序
可能重复:
java错误(找不到合适的驱动程序)
我有一个非常小的可以使用PostgreSQL DB,将它用作单个jar非常方便。 所以我确实尝试过像这样使用maven-assembly-plugin:
maven-assembly-plugin 2.3 pack.name.MainClass jar-with-dependencies
它工作得很好,我可以看到我需要添加到jar文件的所有文件,包括驱动程序的文件,但是当我尝试运行它时,我得到一个:
java.sql.SQLException: No suitable driver found for jdbc:postgresql://:5432/dbname
我有这个:
com.oracle ojdbc6 11.2.0.3 postgresql postgresql 9.1-901-1.jdbc4
在依赖关系中,URL与我上面写的完全一样(除了审查地址:))。 我错过了什么?
谢谢!
如果您不使用Class.forName(...)
手动加载驱动程序,那么我认为您遇到了maven-assembly-plugin
的臭名昭着的问题 – 当它们来自不同的jar
时会覆盖具有相同名称的文件。
在您的情况下,JDBC驱动程序发现机制依赖于名为/META-INF/services/java.sql.Driver
的文件,并且您的依赖项(Oracle和Postgres驱动程序)中至少有两个包含此类文件的jar
,因此运行maven-assembly-plugin
后它们就丢失了。
您可以使用maven-shade-plugin
而不是maven-assembly-plugin
来正确合并这些文件,如此处所述。
或者,您可以使用Class.forName(...)
来回避失败的自动发现机制。