IDEA 编译 Maven 项目报 Malformed \uxxxx encoding
适用范围
- IDEA 中执行 Maven compile/package 报
Malformed \uxxxx encoding,但命令行mvn compile正常 - 适用于所有 Maven 项目,不限于特定项目
需要确认的信息
| 信息 | 获取方式 |
|---|---|
| IDEA 配置的 Maven 本地仓库路径 | IDEA → Settings → Build → Maven → Local repository |
| 命令行 Maven 使用的本地仓库路径 | mvn help:effective-settings 查看 <localRepository> |
| 完整错误信息 | IDEA Maven 构建输出窗口 |
排查流程概览
正常
也报错
不同
相同
是
否
IDEA 编译报 Malformed uxxxx encoding
命令行 mvn compile 正常吗?
对比两边的本地仓库路径
扫描唯一仓库中的 .properties 文件
路径是否相同?
扫描 IDEA 使用的仓库中的 .properties 文件
检查 IDEA 传递的 JVM 参数是否包含 Windows 反斜杠路径
找到损坏文件?
删除损坏文件
用 mvn -X 开启 debug 日志定位具体文件
重新编译验证
修正 JVM 参数中的路径分隔符
执行约束
- 删除的是 Maven 仓库中的缓存文件(
resolver-status.properties),Maven 会自动重新下载,无风险 - 不要删除整个
.m2/repository或仓库根目录
排查步骤
Step 1:确认 IDEA 与命令行使用的本地仓库是否一致
目标:定位为什么 IDEA 报错但命令行不报错
操作:
-
查看 IDEA 的 Maven 配置:
IDEA → File → Settings → Build, Execution, Deployment → Build Tools → Maven
记录 Local repository 和 User settings file 两个路径
-
命令行查看实际生效的本地仓库:
bashmvn help:effective-settings | findstr localRepository -
也可以查看 IDEA workspace 配置确认:
.idea/workspace.xml 中搜索 MavenGeneralSettings
判定:
- 路径不同 → 两边读的仓库不一样,问题文件在 IDEA 使用的那个仓库中,进入 Step 2
- 路径相同 → 进入 Step 3 检查 JVM 参数
Step 2:扫描仓库中损坏的 .properties 文件
目标 :找到包含畸形 \uxxxx 编码的 .properties 文件
操作:
使用 PowerShell 扫描(将 D:\repository 替换为实际路径):
powershell
$files = Get-ChildItem -Path "D:\repository" -Filter "*.properties" -Recurse -ErrorAction SilentlyContinue
foreach ($f in $files) {
try {
$content = [System.IO.File]::ReadAllText($f.FullName)
if ($content -match '\\u([^0-9a-fA-F]|[0-9a-fA-F]{0,3}([^0-9a-fA-F]|$))') {
Write-Host "FOUND: $($f.FullName)"
}
} catch {}
}
判定:
- 找到文件 → 打开确认是否有 `` 空字节或其他损坏内容,进入 Step 4
- 未找到 → 进入 Step 3
Step 3:检查 IDEA Maven Runner 的 JVM 参数
目标:排除 IDEA 传递给 Maven 的参数中包含未转义的 Windows 路径
操作:
- IDEA → Settings → Build → Maven → Runner → VM Options
- 检查是否有类似
-Dxxx=C:\Users\someone的参数,其中\u会被 Java 当作 Unicode 转义
判定:
- 有
\u开头的路径片段 → 改为正斜杠/或双反斜杠\\ - 无异常 → 用
mvn -X compile开启 debug 日志,从堆栈中定位具体读取了哪个文件
Step 4:删除损坏文件并重新编译
目标:修复问题
操作:
powershell
Remove-Item -Path "<损坏文件路径>" -Force
或删除整个依赖目录让 Maven 重新下载:
powershell
Remove-Item -Path "<仓库路径>\com\nimbusds\lang-tag" -Recurse -Force
然后在 IDEA 中重新编译验证。
归因
原因 1:仓库缓存文件损坏(最常见)
Maven 的 resolver-status.properties 文件在写入过程中被中断(断电、强杀进程、磁盘异常),导致文件中出现大量 `` 空字节。java.util.Properties.load() 解析时遇到不合法的 \uxxxx 序列直接抛异常。
特征:打开文件可以看到大量 null 字节或乱码。
原因 2:IDEA 与命令行使用不同的本地仓库
IDEA 的 Maven 设置中 Local repository 可能指向一个不同于 ~/.m2/repository 的路径。命令行正常只是因为它读的仓库恰好没有损坏文件。
原因 3:JVM 参数中的 Windows 路径
IDEA Maven Runner 的 VM Options 中如果包含 -Dpath=C:\Users\xxx,\u 或 \t 等会被解释为转义字符。
实际案例
时间:2026-05-13
现象 :IDEA 编译 camera-download-service 报 Malformed \uxxxx encoding,命令行 mvn compile 正常
排查过程:
- 项目内
.properties文件均正常,无畸形 Unicode - 发现 IDEA 配置的本地仓库为
D:\repository,命令行用的是C:\Users\zhaifeiyu1\.m2\repository - 扫描
D:\repository下所有.properties文件,发现D:\repository\com\nimbusds\lang-tag\resolver-status.properties文件第 7 行包含大量 `` 空字节(文件损坏) - 删除该文件后重新编译,问题解决
输出结论
| 维度 | 结论 |
|---|---|
| 根因 | Maven 本地仓库中的 resolver-status.properties 文件写入中断导致损坏 |
| 为什么只在 IDEA 中复现 | IDEA 和命令行使用了不同的本地仓库路径 |
| 修复方式 | 删除损坏的 .properties 文件,Maven 会自动重建 |
| 预防建议 | 统一 IDEA 与命令行的本地仓库路径,避免维护两份缓存 |
最后更新:2026-05-13