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

Mac OS下jpackage执行失败,关联jlink与孵化器模块问题

解决Mac OS下jpackage因孵化器模块执行失败的问题

问题根源

Mac上jpackage调用jlink时,会默认处理jdk.incubator.foreign、jdk.incubator.vector这两个孵化器模块,但OpenJDK 17里这些模块属于非稳定的孵化器组件,Mac平台的处理逻辑和Windows存在差异,再加上非模块化应用打包时的资源重复冲突,最终触发了报错。

具体修复方案

1. 排除孵化器模块

在Maven exec插件的jpackage调用参数中,通过--exclude-modules明确排除这两个孵化器模块,避免jlink尝试处理它们:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <id>jpackage</id>
            <goals>
                <goal>exec</goal>
            </goals>
            <phase>package</phase>
            <configuration>
                <executable>jpackage</executable>
                <arguments>
                    <!-- 保留原有其他jpackage参数 -->
                    <argument>--exclude-modules</argument>
                    <argument>jdk.incubator.foreign,jdk.incubator.vector</argument>
                    <!-- 后续参数正常添加 -->
                </arguments>
            </configuration>
        </execution>
    </executions>
</plugin>

2. 解决重复资源异常

非模块化应用打包时若存在重复资源(如不同依赖中的同名配置文件、静态资源),可按以下方式处理:

  • 检查项目依赖,移除重复引入的依赖包
  • 打包前清空target目录,手动清理其中的重复资源文件
  • 用--resource-dir参数指定自定义资源目录,统一管理所有需要打包的资源,避免冲突

3. 若需保留孵化器模块的处理

如果代码确实依赖这两个孵化器模块,需显式引入并添加预览特性启用参数(注意预览特性存在稳定性风险):

<argument>--add-modules</argument>
<argument>jdk.incubator.foreign,jdk.incubator.vector</argument>
<argument>--enable-preview</argument>

额外注意事项

  • Mac OS下jpackage对文件路径和系统权限敏感度更高,打包目录避免使用特殊字符,确保当前用户有足够操作权限
  • 对比Windows与Mac的jpackage参数,核心参数保持一致,仅针对平台调整必要选项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:52:47