将所需的驱动程序包含在maven-assembly-plugin中时,找不到合适的驱动程序。

【字号: 日期:2024-02-26浏览:58作者:雯心
如何解决将所需的驱动程序包含在maven-assembly-plugin中时,找不到合适的驱动程序。?

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

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

您可以使用maven-shade-plugin,而不是maven-assembly-plugin作为描述这些文件正确地将合并,在这里。

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

解决方法

我也有一个非常小的数据库,可与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与我上面写的完全一样(除了经过审查的地址:))。我想念什么?

谢谢!

相关文章: