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

Maven项目用jlink创建自定义JRE遇自动模块错误的解决咨询

解决jlink无法处理自动模块(httpcore)的问题

问题根源

jlink只能构建由显式模块(带module-info.java的JAR)组成的自定义JRE,你用的httpcore 4.4.13是老的非模块化JAR,会被JVM识别成自动模块,这类模块不被jlink支持。你之前设置的<automaticModuleName>true</automaticModuleName>完全错了——这个参数要填合法的模块名,不是true,但哪怕填对了,自动模块照样过不了jlink这关。

两种解决办法

办法一:升级HttpCore到模块化版本

HttpCore从5.0版本开始就自带module-info.java了,直接换版本最省心:
把pom.xml里的httpcore依赖改成这样(注意groupId有变化):

<dependency>
    <groupId>org.apache.httpcomponents.core</groupId>
    <artifactId>httpcore</artifactId>
    <version>5.2.4</version> <!-- 可替换为最新稳定版 -->
</dependency>

改完之后重新执行mvn clean javafx:jlink即可,新的httpcore是显式模块,jlink能直接处理。

办法二:给老版本HttpCore补模块信息(不升级)

如果没法升级依赖,就用moditect-maven-plugin给httpcore的JAR手动添加module-info.java,把它转成显式模块:

  1. 在pom.xml的<build><plugins>中添加该插件(要放在JavaFX插件前面):
<plugin>
    <groupId>org.moditect</groupId>
    <artifactId>moditect-maven-plugin</artifactId>
    <version>1.0.0.Final</version>
    <executions>
        <execution>
            <id>add-httpcore-module-info</id>
            <phase>package</phase>
            <goals>
                <goal>add-module-info</goal>
            </goals>
            <configuration>
                <modules>
                    <module>
                        <artifact>
                            <groupId>org.apache.httpcomponents</groupId>
                            <artifactId>httpcore</artifactId>
                            <version>4.4.13</version>
                        </artifact>
                        <moduleInfo>
                            <name>org.apache.httpcomponents.httpcore</name>
                            <exports>org.apache.http.*</exports>
                            <requires java.base>true</requires>
                        </moduleInfo>
                    </module>
                </modules>
            </configuration>
        </execution>
    </executions>
</plugin>
  1. 在你的module-info.java里添加对该模块的依赖:
module 你的模块名 {
    requires javafx.controls;
    requires javafx.fxml;
    // 新增这一行
    requires org.apache.httpcomponents.httpcore;

    opens 你的主类所在包 to javafx.fxml;
    exports 你的主类所在包;
}
  1. 最后重新执行mvn clean javafx:jlink,插件会先给httpcore补好模块信息,再由jlink完成自定义JRE的打包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:42:31