IDEA中Maven打包中文乱码修复(AI生成)
步骤二:根治——关闭 maven.use.scripts 注册项
这是绕过 cmd.exe 套壳、让 IDEA 回归直接调用 java.exe 的最干净解法,全链路保持 UTF-8,不用向 GBK 妥协 CSDN。
- 在 IDEA 界面连按两下
Shift键,打开全局搜索(Search Everywhere)。 - 切到 Actions 选项卡,输入
Registry...(描述为 "Access internal IDE settings and features"),回车打开。 - 在长列表顶部的过滤框里直接键入
maven.use.scripts定位该项。 - 取消该项右侧的复选框勾选(即设为
false/ Disable)。 - 完全重启 IDEA 后再次执行构建,控制台中文即可回归正常 UTF-8 显示。
该开关关闭后,IDEA 直接使用你配置的 Maven 主程序(Bundled 或自定义 MAVEN_HOME),跳过 mvn.cmd 脚本,从而避开 cmd.exe 的 GBK 管道 CSDN。这只改变执行方式,不影响 Maven 的构建结果与功能。若你的项目依赖 Maven Wrapper(
mvnw)或有公司策略限制不能动 Registry,可保留该项开启,改用步骤三/四。
步骤三:配置 Runner 的 VM Options(推荐优于环境变量)
无论是否关闭 maven.use.scripts,都应保证 Maven 运行时的 JVM 编码与项目一致。这一步是 2026.1.4 上最通用的配置。
打开 File → Settings → Build, Execution, Deployment → Build Tools → Maven → Runner,在 VM Options 输入框填入 cnblogs CSDN:
各参数的作用需分开理解:-Dfile.encoding 控制 JVM 默认字符编码,决定 new String()、InputStreamReader 等无显式编码时的解码方式;-Dsun.jnu.encoding 影响文件名/路径编码,对含中文路径(如 D:\我的项目)的工程尤其关键,否则资源拷贝阶段会报找不到文件;-Dstdout.encoding 与 -Dstderr.encoding 是 JDK 18+ 引入的独立标准流编码开关,能覆盖部分插件直接写 System.out 时仍乱码的边缘场景;-Duser.language 与 -Duser.country 让 JVM 按 zh_CN 区域输出日志,避免部分插件按系统默认区域吐出其他编码。
之所以推荐把参数写在 VM Options 而非环境变量里,是因为在 2026.1.4 上实测发现:用环境变量 JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 虽然能让中文正常,但 Maven 每构建一个模块都会输出一行红色的 Picked up JAVA_TOOL_OPTIONS: ... 提示,干扰日志阅读;而写在 VM Options 里则不会产生这条冗余提示 CSDN。
步骤四:环境变量 JAVA_TOOL_OPTIONS 兜底(Wrapper 或外部 Maven 场景)
如果你使用 Maven Wrapper(mvnw)或在系统终端直接跑 mvn,Runner 的 VM Options 可能被绕过,此时需要用环境变量做系统级兜底 掘金。
仍在 Maven → Runner 的 Environment variables 里新增一项,根据评论区补充,完整值应包含标准流编码才能彻底解决 CSDN:
JAVA_TOOL_OPTIONS 是 JVM 启动时无条件读取的全局兜底开关,优先级高于 mvn.cmd 内部的默认设置,因此对新版 cmd.exe /c 套壳场景有效。缺点就是前面提到的红色 Picked up 提示,所以在能用 VM Options 的场景下优先用步骤三。也可同时补充一个 MAVEN_OPTS 用于外部 Maven 或 CI:
步骤五:统一 IDEA 工程编码
仅改运行参数还不够,源码与资源处理阶段也可能产生乱码,需要从 IDE 层统一。打开 File → Settings,搜索 encoding,进入 Editor → File Encodings,把以下三项全部设为 UTF-8:Global Encoding、Project Encoding、Default encoding for properties files,并勾选 Transparent native-to-ascii conversion(针对 properties 文件的本地转 ASCII 透明转换)cnblogs。
这一步解决的是编辑器层的编码:源码文件本身以什么字节序列存盘、properties 文件里的中文是否被转义为 \uXXXX。如果源码文件本身是 GBK 存盘的,再怎么调 JVM 参数也救不回来,所以必须先确保存盘编码正确。
步骤六:在 pom.xml 中声明编码并配置 surefire 插件
工程层需要显式声明编译与资源编码,避免 maven-compiler-plugin、maven-resources-plugin 阶段再乱码 CSDN:
特别地,如果你是在执行 mvn test 时遇到乱码,maven-surefire-plugin 是一个常被忽略的环节。该插件默认 fork 一个新的子 JVM 来跑测试,且其内部的 ConsoleOutputParser 会对输出流做二次解析,因此即使父 JVM 设了 UTF-8,子 JVM 仍可能继承 OS 的 GBK。必须显式声明
CSDN:
其中 redirectTestOutputToFile=false 是关键——若设为 true(部分模板默认值),测试输出会被重定向到文件再由插件读取,多一次编解码转换;设为 false 让输出直接走标准流,配合前面的 JVM 参数即可正确显示。
步骤七:Maven Wrapper 项目的 .mvn/jvm.config
如果项目根目录有 mvnw / mvnw.cmd,IDEA 会优先读取项目内 .mvn/jvm.config 中的 JVM 参数,上述 Runner 的 VM Options 可能被 Wrapper 脚本覆盖。此时需在项目根目录创建或编辑 .mvn/jvm.config,写入一行 CSDN:
这是 Wrapper 模式下最容易被遗漏的一环,排查时务必确认该文件是否存在及其内容。
步骤八:清除缓存并重启验证
所有配置改完后,执行 File → Invalidate Caches… → Invalidate and Restart,让 IDEA 重新加载索引与配置。部分配置(尤其是 Registry 项与 VM Options)必须重启才生效,不清缓存可能仍看到旧乱码。
验证时可以在测试代码里打印一行来确认编码链路是否贯通
CSDN:
预期输出应为 file.encoding=UTF-8、stdout.encoding=UTF-8 以及正常显示的中文。若 file.encoding 仍为 GBK,说明 JVM 参数未被读取到,需回查 VM Options 是否生效或 Wrapper 的 jvm.config 是否覆盖。

浙公网安备 33010602011771号