IDEA 编译 Maven 项目报 Malformed \uxxxx encoding

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 报错但命令行不报错

操作:

  1. 查看 IDEA 的 Maven 配置:

    IDEA → File → Settings → Build, Execution, Deployment → Build Tools → Maven

    记录 Local repository 和 User settings file 两个路径

  2. 命令行查看实际生效的本地仓库:

    bash 复制代码
    mvn help:effective-settings | findstr localRepository
  3. 也可以查看 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 路径

操作:

  1. IDEA → Settings → Build → Maven → Runner → VM Options
  2. 检查是否有类似 -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 正常

排查过程:

  1. 项目内 .properties 文件均正常,无畸形 Unicode
  2. 发现 IDEA 配置的本地仓库为 D:\repository,命令行用的是 C:\Users\zhaifeiyu1\.m2\repository
  3. 扫描 D:\repository 下所有 .properties 文件,发现 D:\repository\com\nimbusds\lang-tag\resolver-status.properties 文件第 7 行包含大量 `` 空字节(文件损坏)
  4. 删除该文件后重新编译,问题解决

输出结论

维度 结论
根因 Maven 本地仓库中的 resolver-status.properties 文件写入中断导致损坏
为什么只在 IDEA 中复现 IDEA 和命令行使用了不同的本地仓库路径
修复方式 删除损坏的 .properties 文件,Maven 会自动重建
预防建议 统一 IDEA 与命令行的本地仓库路径,避免维护两份缓存

最后更新:2026-05-13

相关推荐
小羊没烦恼!3 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里3 天前
java中的继承和多态的区别
java
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕3 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖3 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时3 天前
01-06-A-JVM排查实战详解
java·jvm
vipxieliang3 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
ba_pi3 天前
mysql 查询所有表名并授权
java
ProcessOn官方账号3 天前
java函数式编程--入门基础
java·编程·函数式编程