1

我有一个使用 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

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

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

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

提前致谢。

4

1 回答 1

1

当您MyApp.jar在 manifest.mf 中有一个带有条目的可执行 jar 时:

Class-Path: lib/sqljdbc4.jar

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

+ (a folder)
   + lib
      - sqljdbc.jar
   - MyApp.jar
于 2013-01-24T12:55:17.967 回答