Domanda

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.

È stato utile?

Soluzione

When you have an executable jar MyApp.jar with entry in the manifest.mf:

Class-Path: lib/sqljdbc4.jar

This means that the jar has an external dependency to sqljdbc4.jar in the (relative) folder lib. It is not included in the jar you created! So you need to make sure that there is a lib-folder containing sqljdbc4.jar relative to that jar when you execute it. So the folder structure when executing needs to be;

+ (a folder)
   + lib
      - sqljdbc.jar
   - MyApp.jar
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top