2012-09-06 14 views
5

Eventuali duplicati:
java error (No suitable driver found)Nessun driver adatto trovato quando compresi i driver necessari con Maven-assemblaggio-plugin

Ho un piccolo troppo che funziona con un PostgreSQL DB e sarebbe molto comodo usarlo come un vaso singolo. Così in effetti Ho provato con l'esperto di montaggio-plugin in questo modo:

<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> 

e funziona perfettamente bene, posso vedere tutti i file che richiedono aggiunta al file jar, inclusi i file del driver, ma quando ho 'm cercando di eseguirlo ottengo un:

java.sql.SQLException: No suitable driver found for jdbc:postgresql://<ip>:5432/dbname 

ho questo:

<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> 

Nelle dipendenze e l'URL è esattamente come ho scritto sopra (eccetto l'indirizzo censurato :)). Cosa mi manca?

Grazie!

+0

è necessario aggiungere quel driver alle dipendenze – ant

+0

Il driver ** è ** nelle dipendenze ... E la sintassi è corretta. – Scis

+0

Avete 'Class.forName (...)' per caricare il driver? – axtavt

risposta

10

Se non si utilizza Class.forName(...) per caricare il driver manualmente, allora penso che avete dovuto affrontare un problema di infame con maven-assembly-plugin - è sovrascrive i file con lo stesso nome quando provengono da diverse jar s.

Nel tuo caso JDBC meccanismo di scoperta conducente si basa su un file denominato /META-INF/services/java.sql.Driver, e si dispone di almeno due jar s che contengono un file nel vostro dipendenze (Oracle e Postgres driver), quindi uno di loro è perduto dopo l'esecuzione maven-assembly-plugin.

È possibile utilizzare maven-shade-plugin anziché maven-assembly-plugin per unire correttamente questi file, come descritto here.

In alternativa, è possibile utilizzare Class.forName(...) per aggirare il meccanismo di individuazione automatica difettoso.

+0

Grazie, il plugin per lo schermo è stato perfetto. Questo è un importante "problema noto" per il plugin di maven-assembly, probabilmente non ci stiamo ... – Scis

Problemi correlati