2012-09-06 10 views
5

可能性の重複:
java error (No suitable driver found)ませ最適なドライバありません

私も非常に小さいを持ってPostgreSQLのDBとそれに動作します単一の瓶として使用すると非常に便利です。だから、確かに私はそうのような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ファイルに追加見ることができますが、ときに私それを実行しようとしている私が取得:

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という名前のファイルに依存している、とあなたはそれらのいずれかがmaven-assembly-pluginを実行した後に失われるので、あなたの依存関係(OracleおよびPostgresのドライバ)でそのようなファイルを含む少なくとも2 jar秒を持っています。

maven-assembly-pluginの代わりにmaven-shade-pluginを使用して、hereのようにこれらのファイルを正確にマージすることができます。

また、Class.forName(...)を使用すると、失敗した自動検出メカニズムを回避できます。

+0

ありがとう、陰影のプラグインは素晴らしかった。これは、Mavenアセンブリの重要な「既知の問題」です。プラグインは、おそらくそれから離れています... – Scis

関連する問題