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

如何修复IntelliJ Gradle Kotlin项目构建jar包时因mssql-jdbc依赖报错问题

问题根因

问题出在com.microsoft.sqlserver:mssql-jdbc:6.2.2.jre8依赖自带的数字签名文件和IDEA默认打胖Jar的逻辑冲突:该依赖的Jar包META-INF目录下存在MSFTSIG.SF、MSFTSIG.RSA等签名校验文件,当你把所有依赖解压合并成单个可运行Jar时,签名文件会保留,但合并后的Jar内容已经和原始签名匹配不上,JVM加载Jar时校验签名失败,就会抛出找不到主类的错误。

修复方案

方案1:修改IDEA Artifact配置(适合继续用IDEA手动构建的场景)

  • 打开IDEA项目结构(快捷键Ctrl+Alt+Shift+S),进入「Artifacts」选项卡,选中你当前的可运行Jar构建配置
  • 在输出布局的「Available Elements」列表中,找到mssql-jdbc-6.2.2.jre8.jar依赖项,展开其META-INF目录,删除所有后缀为.SF、.RSA、.DSA的签名文件
  • 保存配置后重新构建Artifact即可正常运行

方案2:通过Gradle配置自动构建(更稳定,避免重复手动操作)

在你现有的build.gradle文件末尾添加如下配置,直接通过Gradle的jar任务构建可运行Jar:

jar {
    manifest {
        // 填写实际主类全路径,和报错信息里的主类名保持一致即可
        attributes 'Main-Class': 'hu.qlmdc.drp.HelloWorldKt'
    }
    // 处理重复文件冲突
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    // 把所有依赖打包进Jar生成胖Jar
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    // 过滤所有依赖自带的签名文件,避免签名校验冲突
    exclude 'META-INF/*.SF'
    exclude 'META-INF/*.RSA'
    exclude 'META-INF/*.DSA'
}

配置完成后执行Gradle的jar任务,即可在项目build/libs目录下拿到可正常运行的Jar包,无需再手动配置IDEA Artifact。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 11:36:03