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 repositoryUser 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

相关推荐
刀法如飞6 小时前
AI时代:DDD领域驱动建模与Ontology语义建模的区别
java·设计模式·架构
jeffer_liu6 小时前
Spring AI 生产级实战:工具调用
java·人工智能·后端·spring·ai编程
比昨天多敲两行6 小时前
linux 线程概念与控制
java·开发语言·jvm
8Qi86 小时前
LeetCode 75:颜色分类(荷兰国旗问题)—— Java 题解 ✅
java·算法·leetcode·指针·排序
zzhongcy6 小时前
@Transactional 同类内部调用失效 + 两种自代理解决方案
java
AutumnWind04207 小时前
【Intelij IDEA使用手册】
java·ide·intellij-idea
就叫_这个吧8 小时前
Java注解、元注解、自定义注解定义及应用
java·开发语言·注解
Sam_Deep_Thinking8 小时前
聊聊Java中的of
java·开发语言·架构
NE_STOP9 小时前
Docker--管理监控平台的应用
java
爱吃羊的老虎9 小时前
【JAVA】python转java:Spring Boot 入门
java·spring boot·python