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

相关推荐
chde2Wang1 分钟前
hadoop部署错误-namenode address dfs.namenode.servicerpc-address not configured
java·大数据·hadoop
牛战士coding16 分钟前
Java 对象写入 Redis 后类型变了?Jackson 多态序列化问题复盘
java·开发语言·redis
小白的码BUG之路20 分钟前
Jenkins -- 配置jdk和maven
java·jenkins·maven
xiaoqiMikko21 分钟前
Redis 实战(基础篇):把一个老 RedisUtil 搬到 Spring Boot 4,一路踩出来的坑(真机实测)
java·spring boot·redis
yuniko-n26 分钟前
【JUC】读写锁
java·开发语言
yuzhiboyouye37 分钟前
后端怎么评估工作量
java
java资料站37 分钟前
十五、Spring AI Alibaba · 高级 ·Graph
java·人工智能·spring
金銀銅鐵1 小时前
[Java] 用 GUI 展示 ArrayList 扩容的过程
java·后端·ai编程
磊 子1 小时前
什么是虚假唤醒(spurious wakeup)?从 POSIX 标准讲到 futex 内核
java·开发语言
飘然生1 小时前
traceId链路 skywalking java agent
java·开发语言·skywalking