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

JavaFX项目用jlink打包遇java.xml.bind模块依赖错误求助

解决Java 19中jlink因java.activation缺失导致的错误

问题根源

Java 9及以后版本彻底移除了Java EE相关模块(包括java.activation和java.xml.bind),这些功能现在以第三方库的形式提供。你使用的jaxb-api:2.3.1依赖java.activation模块,但你下载的jaf-1.1.1不是模块化版本(无module-info.java),导致jlink无法将其识别为java.activation模块。

解决方案一:使用模块化的Java Activation Framework版本

这是最规范的解决方式,使用官方提供的模块化JAF版本:

  1. 获取模块化JAF jar包
    下载javax.activation-api:1.2.0(该版本包含module-info.java,模块名正是java.activation)。若使用Maven,可添加以下依赖自动下载:

    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>javax.activation-api</artifactId>
        <version>1.2.0</version>
    </dependency>
    

    本地路径通常为C:\Users\alex_\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar

  2. 更新module-info.java
    添加对java.activation的显式依赖:

    module org.aned.mosaic {
        exports mosaic;
    
        requires java.logging;
        requires org.apache.commons.lang3;
        requires java.xml.bind;
        requires java.activation; // 新增依赖声明
        requires java.desktop;
        requires transitive javafx.graphics;
        requires transitive javafx.controls;
        requires transitive javafx.fxml;
    }
    
  3. 修改jlink命令
    将javax.activation-api-1.2.0.jar的路径加入--module-path:

    jlink --output output/image --module-path "output/modules;C:\Program Files\Java\javafx-sdk-19\lib;C:\Users\alex_\.m2\repository\org\apache\commons\commons-lang3\3.12.0\commons-lang3-3.12.0.jar;C:\Users\alex_\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\alex_\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar" --add-modules org.aned.mosaic --launcher Mosaic=org.aned.mosaic
    

解决方案二:将非模块化JAF作为自动模块使用

若你坚持使用jaf-1.1.1的activation.jar,可将其作为自动模块处理:

  1. 优化jar包命名(可选)
    将activation-1.1.1.jar重命名为activation.jar,避免版本号干扰自动模块名(自动模块名默认是jar文件名去掉后缀)。

  2. 更新module-info.java
    依赖声明改为自动模块名:

    module org.aned.mosaic {
        exports mosaic;
    
        requires java.logging;
        requires org.apache.commons.lang3;
        requires java.xml.bind;
        requires activation; // 使用自动模块名
        requires java.desktop;
        requires transitive javafx.graphics;
        requires transitive javafx.controls;
        requires transitive javafx.fxml;
    }
    
  3. 修改jlink命令
    将activation.jar的路径加入--module-path:

    jlink --output output/image --module-path "output/modules;C:\Program Files\Java\javafx-sdk-19\lib;C:\Users\alex_\.m2\repository\org\apache\commons\commons-lang3\3.12.0\commons-lang3-3.12.0.jar;C:\Users\alex_\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\你的路径\activation.jar" --add-modules org.aned.mosaic --launcher Mosaic=org.aned.mosaic
    

额外注意事项

  • 确保所有依赖的jar包都被包含在--module-path中,jlink只会从指定路径查找模块。
  • 若后续遇到javax.xml.bind.JAXBContext找不到的问题,还需添加JAXB实现库(如org.glassfish.jaxb:jaxb-runtime:2.3.1)到module-path,并在module-info.java中添加requires jaxb.runtime;声明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:02:22