2012-09-06 40 views
5

可能重复:
java error (No suitable driver found)没有合适的驱动程序找到包括与Maven的组装插件所需的驱动程序时

我有一个非常小的也与一个PostgreSQL数据库和它的工作原理将它作为一个单独的罐子使用会非常方便。所以,事实上,我已经使用Maven的组装插件像这样尝试:

<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文件中的文件,包括司机在内的文件,但是当我“M试图运行它,我得到一个:

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是完全按照我上面写的(除审查地址:))。 我错过了什么?

谢谢!

+0

您需要将该驱动程序添加到您的依赖关系 – ant

+0

驱动程序**在依赖关系中为**并且语法正确。 – Scis

+0

你有'Class.forName(...)'加载驱动程序吗? – axtavt

回答

10

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

在你的情况JDBC驱动程序发现机制依赖于一个名为/META-INF/services/java.sql.Driver文件,你必须包含这样的文件,你的依赖(Oracle和Postgres的驱动程序)至少两个jar S,因此他们中的一个运行maven-assembly-plugin后丢失。

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

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

+0

谢谢,树荫插件做得很好。这是maven-assembly-plugin的一个重要“已知问题”,我们可能会远离它... – Scis

相关问题