2012-09-06 69 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

相關問題