在可执行JAR中失败的sqljdbc4连接

时间:2013-01-23 23:23:23

标签: sql-server-2008 jdbc executable-jar sqljdbc

我有一个使用sqljdbc4.jar连接到SQL Server 2008数据库的GUI应用程序。如果我从命令行运行它,它可以很好地工作。

但是,一旦我将其包装到可执行的JAR中,我就会收到“找不到适合jdbc的驱动程序:sqlserver:// myServer:1433; databaseName = myDb”错误。我知道我的Windows系统CLASSPATH在JAR中被忽略了,但我无法弄清楚在可执行JAR中包含sqljdbc4.jar并获得一个可移植的应用程序。

我最近解决这个问题的尝试如下:

我的MANIFEST.MF文件:

Manifest-Version: 1.0
Class-Path: lib/sqljdbc4.jar
Created-By: 1.7.0_11 (Oracle Corporation)
Main-Class: MyApp

我用来编译JAR的命令:

jar cmf MANIFEST.MF MyApp.jar MyApp.class help.html lib

我的目录结构如下。我在MyApp目录中运行jar命令。

+ MyApp
    + lib
        - sqljdbc.jar
    - help.html
    - MANIFEST.MF
    - MyApp.class
    - MyApp.java

当我创建JAR并在MyApp目录中运行它时,它可以正常工作。一旦我将其拉出目录,我就会收到错误消息。如何让JAR访问内部可用的sqljdbc.jar?

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果您有一个可执行jar MyApp.jar,其中包含manifest.mf中的条目:

Class-Path: lib/sqljdbc4.jar

这意味着jar对(相对)文件夹sqljdbc4.jar中的lib具有外部依赖关系。它不包含在您创建的jar中!所以你需要确保在执行它时有一个lib - 相对于该jar包含sqljdbc4.jar的文件夹。所以执行时的文件夹结构需要;

+ (a folder)
   + lib
      - sqljdbc.jar
   - MyApp.jar