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

JDK 9 jlink执行报错‘--output must be specified’,求问题排查

解决jlink报错"Error: --output must be specified"的问题

嘿,我来帮你排查这个问题~ 你遇到的这个报错看似矛盾——明明已经写了--output out,却还是提示必须指定它,核心问题出在模块路径的分隔符使用错误,另外还有几个小细节可以优化:

错误原因分析

你用了分号;来分隔模块路径里的${JAVA_HOME}/jmods和mlibs/reader@1.0.jar,但这个分隔符的兼容性很关键:

  • 如果你在Windows的cmd/PowerShell里执行命令,分号;确实是正确的模块路径分隔符,但你没必要单独指定reader@1.0.jar,直接指向存放所有模块化jar的mlibs目录更合理;
  • 如果你在Linux/macOS的bash/zsh等类Unix shell里执行,分号;会被当成命令结束符——shell会把${JAVA_HOME}/bin/jlink --module-path ${JAVA_HOME}/jmods当成一个独立命令执行,这个命令里没有--output参数,自然就会报错。

修正后的jlink命令

根据你的操作系统选择对应的命令:

1. Windows系统

%JAVA_HOME%\bin\jlink --module-path %JAVA_HOME%\jmods;mlibs --add-modules decoder --output out

2. Linux/macOS系统

${JAVA_HOME}/bin/jlink --module-path ${JAVA_HOME}/jmods:mlibs --add-modules decoder --output out

额外优化建议

  • 模块路径指向目录而非单个jar:把mlibs目录加到模块路径里,jlink会自动扫描目录下的所有模块化jar,自动处理模块间的依赖(比如decoder依赖reader),不用手动指定单个jar;
  • 指定主模块而非依赖模块:你的应用入口是Decoder类,所以--add-modules应该指定decoder模块,jlink会自动把它依赖的reader模块也包含到自定义运行时里;
  • 确保你的jar是模块化jar:你之前打包的decoder.jar和reader@1.0.jar已经包含了module-info.class,这部分是没问题的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:05:35