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

如何解决MSSQL JDBC Driver无法创建自定义Runtime Image的问题

解决jlink无法使用自动模块com.microsoft.sqlserver.jdbc的问题

问题原因

jlink工具仅支持显式模块(包含module-info.class的模块化jar包),而你使用的mssql-jdbc属于自动模块(未定义module-info.class,仅通过jar文件名识别模块名),因此jlink无法将其纳入自定义Runtime Image,触发报错。


解决方案一:改用jpackage打包(推荐)

jpackage工具支持自动模块,可直接替代jlink生成包含所有依赖的Runtime Image或安装包。修改pom.xml中的JavaFX Maven插件配置:

<plugin>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>0.0.8</version>
    <executions>
        <execution>
            <id>default-cli</id>
            <configuration>
                <mainClass>com.example.demo/com.example.demo.HelloApplication</mainClass>
                <launcher>app</launcher>
                <!-- 移除原有jlink配置,添加jpackage相关设置 -->
                <jpackage>true</jpackage>
                <jpackageImageName>app</jpackageImageName>
                <jpackageInstallerName>app-installer</jpackageInstallerName>
            </configuration>
        </execution>
    </executions>
</plugin>

执行打包命令:

mvn clean javafx:jpackage

执行完成后,会在target目录下生成可执行的Runtime Image和安装包。


解决方案二:将自动模块转换为显式模块

通过工具给mssql-jdbc jar添加module-info.class,使其成为jlink支持的显式模块。

手动转换步骤:

  1. 定位本地Maven仓库中的mssql-jdbc jar:C:/Users/artyukhev/.m2/repository/com/microsoft/sqlserver/mssql-jdbc/11.2.3.jre17/mssql-jdbc-11.2.3.jre17.jar
  2. 生成模块信息:
jdeps --generate-module-info . mssql-jdbc-11.2.3.jre17.jar
  1. 编译生成的module-info.java:
javac --patch-module com.microsoft.sqlserver.jdbc=./mssql-jdbc-11.2.3.jre17.jar com.microsoft.sqlserver.jdbc/module-info.java
  1. 将编译后的module-info.class加入原jar:
jar uf mssql-jdbc-11.2.3.jre17.jar -C com.microsoft.sqlserver.jdbc module-info.class
  1. 将修改后的jar放回原Maven仓库路径,覆盖原文件。

之后重新执行jlink命令即可:

mvn clean javafx:jlink

解决方案三:用Moditect插件自动生成模块信息

通过moditect-maven-plugin在构建过程中自动为mssql-jdbc生成并添加module-info.class,无需手动修改jar包。

在pom.xml的<build><plugins>中添加插件配置:

<plugin>
    <groupId>org.moditect</groupId>
    <artifactId>moditect-maven-plugin</artifactId>
    <version>1.0.0.Final</version>
    <executions>
        <execution>
            <id>add-module-info</id>
            <phase>package</phase>
            <goals>
                <goal>add-module-info</goal>
            </goals>
            <configuration>
                <modules>
                    <module>
                        <artifact>
                            <groupId>com.microsoft.sqlserver</groupId>
                            <artifactId>mssql-jdbc</artifactId>
                            <version>11.2.3.jre17</version>
                        </artifact>
                        <moduleInfo>
                            <name>com.microsoft.sqlserver.jdbc</name>
                            <requires>java.sql</requires>
                            <requires>java.naming</requires>
                            <requires>java.xml</requires>
                            <exports>com.microsoft.sqlserver.jdbc</exports>
                            <exports>com.microsoft.sqlserver.jdbc.datatypes</exports>
                            <!-- 可根据jdeps生成的结果补充其他exports/requires -->
                        </moduleInfo>
                    </module>
                </modules>
            </configuration>
        </execution>
    </executions>
</plugin>

执行命令完成构建和jlink:

mvn clean package javafx:jlink

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:09:51