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

如何创建带支持MySQL的manifest的可执行jar包,解决跨平台、Docker及Gradle报错

错误根因

java.sql.SQLException: No suitable driver found 报错的核心原因是应用运行时的classpath中未包含MySQL驱动包,下面分别针对不同场景给出解决方案,最后给出提升可移植性的通用方案:

1. Docker场景报错修复

你当前的配置有两个容易踩坑的点:

  • 首先确认manifest.txt文件末尾必须保留一个空行,否则JDK不会识别Class-Path配置项,这是JDK打包的强制规范,很多场景下的manifest不生效都是这个原因导致
  • 进入运行容器后先执行ls命令,确认当前目录下存在lib/mysql-connector-java-8.0.27.jar文件,和manifest中配置的路径完全匹配
  • 临时验证可以手动指定classpath运行:
    java -cp "my_app.jar:lib/*" Main
    

如果上述命令可以正常运行,即可确认是manifest配置或路径映射问题,修正后即可正常运行。

2. Gradle场景报错修复

你当前的Gradle默认打包逻辑只会打包你自己写的代码,不会把依赖的MySQL驱动打进jar包,因此运行时找不到驱动,需要修改build.gradle配置打Fat Jar(包含所有依赖的可执行jar包):

plugins {
  id 'java'
}

jar {
    manifest {
        attributes 'Main-Class': 'myApp.Main'
    }
    // 把所有依赖包解压合并到最终jar中
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    // 排除重复文件避免打包冲突
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'mysql:mysql-connector-java:8.0.27'
}

修改后执行gradle build命令,生成的jar包在build/libs目录下,直接执行java -jar 生成的jar包名.jar即可运行,无需额外携带lib目录。

3. 跨平台可移植性优化方案

  • 优先使用Gradle/Maven构建Fat Jar,单个jar包包含所有依赖,无需处理不同系统的路径差异问题,Windows、Mac、Linux都可以直接运行,解决了你最开始手动构建命令不兼容Windows的问题
  • Docker方案建议简化为直接拷贝Gradle打好的Fat Jar进入镜像,无需在Docker中编译代码,Dockerfile示例如下:
    FROM openjdk:17-slim
    WORKDIR /app
    COPY build/libs/my_app.jar ./
    ENTRYPOINT ["java", "-jar", "my_app.jar"]
    
  • 额外注意:如果MySQL部署在宿主机,Docker容器内运行应用时不要用localhost访问,Mac/Windows环境可以用host.docker.internal代替localhost,Linux环境可以加--network=host参数运行容器使用宿主机网络。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:15:06