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

JavaFX+Maven项目打包Jar后出现com.mysql.cj.jdbc.Driver类找不到异常

解决JavaFX Maven打包后MySQL驱动找不到的问题

1. 检查MySQL驱动的Maven依赖配置

确保你的MySQL驱动依赖没有设置scope=provided或test,这会导致打包时驱动不被包含。正确的依赖配置示例:

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.0.33</version> <!-- 使用最新稳定版本 -->
</dependency>

2. 修正module-info.java的模块声明

JavaFX是模块化项目,必须在module-info.java中声明对MySQL驱动模块的依赖:

module your.module.name {
    requires javafx.controls;
    requires javafx.fxml;
    requires mysql.connector.j; // MySQL 8.0.23+的模块名为mysql.connector.j,旧版本为mysql.connector.java
    
    // 若代码中用反射加载驱动,需添加此行开放对应包
    opens your.package.name to mysql.connector.j;
}

3. 调整Maven打包插件配置

若使用javafx-maven-plugin打包

需在插件配置中明确包含MySQL驱动模块:

<plugin>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>0.0.8</version>
    <configuration>
        <mainClass>your.module.name/your.main.class.full.path</mainClass>
        <launcher>your-app-name</launcher>
        <modulePaths>
            <modulePath>${project.build.directory}/modules</modulePath>
        </modulePaths>
        <addModules>
            <addModule>mysql.connector.j</addModule>
        </addModules>
    </configuration>
    <executions>
        <execution>
            <id>default-cli</id>
            <phase>package</phase>
            <goals>
                <goal>jlink</goal>
            </goals>
        </execution>
    </executions>
</plugin>

若使用maven-shade-plugin打包成可执行Jar

必须添加服务加载器转换器,避免驱动的服务配置丢失:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.4.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <!-- 合并服务加载器配置文件,这是关键 -->
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>your.main.class.full.path</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

4. 修正数据库驱动加载方式

JDBC 4.0+支持自动加载驱动,无需手动调用Class.forName("com.mysql.cj.jdbc.Driver"),直接获取连接即可:

String url = "jdbc:mysql://localhost:3306/your_db?useSSL=false&serverTimezone=UTC";
String user = "root";
String password = "your_password";
Connection conn = DriverManager.getConnection(url, user, password);

5. 验证打包内容

打包完成后,检查生成的产物:

  • 若为Jar包,解压后查看BOOT-INF/lib目录是否存在mysql-connector-j-xxx.jar
  • 若为jlink镜像,查看modules目录是否包含mysql.connector.j模块

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:02:22