Sci*_*cis 5 java postgresql jar jdbc maven
可能重复:
java错误(找不到合适的驱动程序)
我有一个非常小的可以使用PostgreSQL DB,将它用作单个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>
Run Code Online (Sandbox Code Playgroud)
它工作得很好,我可以看到我需要添加到jar文件的所有文件,包括驱动程序的文件,但是当我尝试运行它时,我得到一个:
java.sql.SQLException: No suitable driver found for jdbc:postgresql://<ip>:5432/dbname
Run Code Online (Sandbox Code Playgroud)
我有这个:
<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>
Run Code Online (Sandbox Code Playgroud)
在依赖项中,URL与我上面写的完全一样(除了删失地址:)).我错过了什么?
谢谢!
axt*_*avt 11
如果您不使用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(...)用来回避失败的自动发现机制.
| 归档时间: |
|
| 查看次数: |
6023 次 |
| 最近记录: |