DEBUG.WIKI
搬瓦工;先看线路,再选 VPS;CN2 GIA · 对应线路套餐;查看线路 →
野草云;香港 200Mbps 峰值;不限月流量 · BGP VPS;查看套餐 →
V.PS:让项目靠近用户,亚太、欧洲、北美 KVM VPS

maven.config 的 --define 无法解析:选项和值各占一行

命令行能接受的 --define 写进 .mvn/maven.config 后可能被当成一个完整参数。Maven 3.9 起应按一参数一行组织,而不是复制 shell 引号。

终端里 mvn --define revision=1.0-SNAPSHOT --version 可以执行,把整段选项写进 .mvn/maven.config 后却报:

Unable to parse maven.config file options:
Unrecognized option: --define 'revision=1.0-SNAPSHOT'

Maven 3.9.0 起,这个文件按“一参数一行”处理。它不是 shell 脚本,不会先把一行中的选项和值按 shell 规则拆开,也不能靠加一对单引号得到同样效果。Maven 3.9.16 的具体问题涉及这条区别。

长选项和值分成两个参数

把 .mvn/maven.config 对应内容写成:

--define
revision=1.0-SNAPSHOT

--define 消费下一行作为值。没有 shell 参与时,这里的单引号可能成为值本身的一部分,所以不要照搬终端中为了防止分词而使用的引号。

需要包含空格的属性值时,也让整份值留在同一行,例如:

--define
message=hello world

一行一个参数正是为了保留这种值,不应再用通用空白分词脚本预处理整个文件。短写法 -Drevision=1.0-SNAPSHOT 本身是一个参数,也可以独占一行;不要把多组选项重新挤到一行。

不要混用旁边的 JVM 配置规则

.mvn/jvm.config 给 JVM 选项使用,.mvn/maven.config 给 Maven CLI 参数使用。两个文件相邻,不表示它们在所有版本中都有相同的分词方式。--add-opens 等 JVM 参数应放在适当入口,不能用它们的成功写法反推 Maven 参数格式。

保留现有配置的顺序与其他选项。若脚本或 CI 自动生成该文件,应一起修改生成逻辑,否则下次生成还会覆盖手工修正。检查时也要避免把包含密码的属性写入公开日志。

修改后先确认原 Maven 入口能越过参数解析,再验证相关属性在实际目标中取得预期值,尤其要检查是否意外保留了引号。--version 能运行,只证明参数可解析,不能证明完整构建和所有属性用途正确。

配置文件应保持文档说明的逐参数格式。更换 Maven 版本后也应检查包含空格的值,没有必要为这类参数解析错误清空依赖仓库或跳过项目模型检查。