I have a GUI application that connects to a SQL Server 2008 database using sqljdbc4.jar. If I run this from the command line it works great.
However, once I wrap it into an executable JAR, I get a “No suitable driver found for jdbc:sqlserver://myServer:1433;databaseName=myDb” error. I know that my Windows system CLASSPATH is ignored once it’s in a JAR, but I can’t figure out include the sqljdbc4.jar within the executable JAR and get a portable application.
My most recent attempt to fix this is as follows:
My MANIFEST.MF file:
Manifest-Version: 1.0
Class-Path: lib/sqljdbc4.jar
Created-By: 1.7.0_11 (Oracle Corporation)
Main-Class: MyApp
The command I use to compile the JAR:
jar cmf MANIFEST.MF MyApp.jar MyApp.class help.html lib
My directory structure is below. I am running the jar command inside the MyApp directory.
+ MyApp
+ lib
- sqljdbc.jar
- help.html
- MANIFEST.MF
- MyApp.class
- MyApp.java
When I create the JAR and run it inside the MyApp directory, it works fine. As soon as I pull it out of the directory, I get the error. How can I make the JAR access the sqljdbc.jar that is available internally?
Thanks in advance.
When you have an executable jar
MyApp.jarwith entry in the manifest.mf:This means that the jar has an external dependency to
sqljdbc4.jarin the (relative) folderlib. It is not included in the jar you created! So you need to make sure that there is alib-folder containingsqljdbc4.jarrelative to that jar when you execute it. So the folder structure when executing needs to be;