Possible Duplicate:
java error (No suitable driver found)
I have a very small too that works with a PostgreSQL DB and it would be very convenient to use it as a single jar. So indeed I've tried using the maven-assembly-plugin like so:
<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>
And it works perfectly fine, I can see all the files I require added to the jar file, including the driver's files but when I'm trying to run it I get a:
java.sql.SQLException: No suitable driver found for jdbc:postgresql://<ip>:5432/dbname
I have this:
<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>
In the dependencies and the URL is exactly as I wrote above (except the censored address :) ). What am I missing?
Thanks!
If you don't use Class.forName(...)
to load the driver manually, then I think you faced an infamous problem with maven-assembly-plugin
- it overwrites files with the same name when they come from different jar
s.
In your case JDBC driver discovery mechanism relies on a file named /META-INF/services/java.sql.Driver
, and you have at least two jar
s containing such a file in your dependencies (Oracle and Postgres drivers), therefore one of them is lost after running maven-assembly-plugin
.
You can use maven-shade-plugin
instead of maven-assembly-plugin
to merge these files correcly, as described here.
Alternatively, you can use Class.forName(...)
to sidestep the failing autodiscovery mechanism.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With