You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

打包JAR后抛出java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver求助

解决JAR打包后找不到SQLServerDriver的问题

嘿,我之前也碰到过一模一样的问题,咱们一步步来排查和解决:

1. 先去掉多余的Class.forName()调用

从Java 6(JDBC 4.0)开始,JVM会自动扫描JDBC驱动JAR里的META-INF/services/java.sql.Driver文件来加载驱动,完全不需要手动调用Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")。这行代码反而可能在打包后的类路径环境下引发加载冲突。

修改你的连接代码,删掉这部分:

// 删掉下面这段
try {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

直接保留DriverManager.getConnection()的逻辑就行。

2. 确认你打包的是「胖JAR(Fat JAR)」

你反编译看到驱动在JAR里,但可能是打包方式不对,导致JVM无法正确找到驱动类。比如IntelliJ默认的「JAR from modules with dependencies」有时候会把依赖JAR作为嵌套文件放进去,但没有正确合并类路径,导致加载失败。

如果你用Maven构建:

用maven-shade-plugin来构建包含所有依赖的可执行JAR,配置示例如下:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>3.2.4</version>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
          <configuration>
            <transformers>
              <!-- 替换成你的主类全路径,比如howareyoufeeling.Main -->
              <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <mainClass>your.full.main.class.path</mainClass>
              </transformer>
            </transformers>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

执行mvn package后,target目录下带shaded后缀的JAR就是包含所有依赖的胖JAR,运行这个JAR试试。

如果你用IntelliJ手动打包:

在「Project Structure」→「Artifacts」里,确保你创建的JAR artifact把所有依赖的JDBC驱动JAR都添加到「Output Layout」中,并且选择「Extract to the target JAR」选项,而不是「Copy to output directory and link via manifest」。这样驱动类会被直接合并到你的JAR里,而不是作为嵌套JAR存在。

3. 检查JDK与驱动版本的兼容性

确认你运行JAR的JDK版本和SQL Server JDBC驱动版本匹配:

  • 比如mssql-jdbc-12.x.x需要JDK 8+
  • 旧版本驱动(比如sqljdbc4.jar)支持JDK 6/7
    如果运行环境的JDK版本低于驱动要求,也会出现类找不到的异常。

4. 验证JAR的类路径

如果以上都不行,你可以用命令行运行JAR时显式指定类路径,比如:

# Windows系统用分号分隔类路径
java -cp your-app.jar;path/to/mssql-jdbc.jar howareyoufeeling.database.DatabaseOperations

# Linux/macOS系统用冒号分隔类路径
java -cp your-app.jar:path/to/mssql-jdbc.jar howareyoufeeling.database.DatabaseOperations

如果这样能正常运行,说明你的打包还是没把驱动正确包含进去,回到第二步重新配置打包方式。


内容的提问来源于stack exchange,提问作者Wikimmax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:03:56