调试解决 java.lang.IllegalArgumentException: Malformed \uxxxx encoding 编译错误

今天编译项目时遇到了这样一个错误:Malformed \uxxxx encoding

java.lang.IllegalArgumentException: Malformed \uxxxx encoding.

显然,有个文件损坏了,但是可惜的是 Maven 没有告诉我们到底是哪个文件损坏了。

可以直接扬了 .m2 本地仓库,但是成本太高。依赖很多的情况下,就国内的网络情况不拉个一晚上怕是拉不下来需要的依赖。

着手解决

首先切换到 Terminal 终端,cd 到故障 Maven 项目/模块 目录下面,使用 mvn package -X 重新触发一次编译。

mvn package -X

这次可以看到,我们获得了更详细的错误,但是还是没有故障文件的路径。

因此,我们需要借助 IDE 的调试功能调试一下。首先分析下堆栈,对着蓝色的链接挨个点一遍,看看从哪里读取了一个 Properties 文件:

分析调用栈

如图所示,在 DefaultUpdateCheckManager.java:250 的位置读入了一个 touchFile,在对应那一行的前面点一下创建一个断点(出现红点)。

调试运行

为了使断点生效,则必须将 JVM 挂接到 IDE 上。最简单的方式是使用 IDE 的 “调试(DEBUG)”功能。

点击左上角的运行框,展开下拉菜单,选择 Edit Configurations...来编辑调试配置文件。

Editi Configurations...

点击左上角的 + 号按钮,添加新配置,选择 Maven。

创建新的 Maven 配置文件

在 Run(运行命令)的编辑框中输入我们刚刚使用的 package -X 命令。

在 Working Directory(工作目录)中选择出现故障的 Maven 项目/模块。

设置运行/调试配置文件

点击 OK,保存并关闭窗口。

点击 OK

启动调试

保存后,我们就可以在运行下拉框中找到刚刚创建的配置文件,选择 Debug(调试)方式运行。

选择以 Debug 模式调试运行。

Maven 运行后,很快到达我们设置的断点,检查我们想要知道的 touchFile 的值。

检查 touchFile 变量的值

在资源管理器中找到这个文件,打开,检查是否损坏:

找到 touchFile 中对应的文件
检查是否损坏

发现该文件存在大量的 \u0000 确定该文件损坏,删除,重新让 Maven 解决依赖,问题解决。

问题解决

如果你打开的文件似乎没有损坏,可以继续运行调试,检查其他文件。

更简单的方法

直接把 .m2 目录下的所有子文件夹的所有 resolver-status.properties 一起删了,众生平等一起重新解决一遍依赖也是可以的。

.m2 目录在哪里

按下 Win+R 键,打开 “运行”,输入 %USERPROFILE%\.m2,敲回车就可以了。

打开 .m2 文件夹
除特殊说明以外,本站原创内容采用 知识共享 署名-非商业性使用 4.0 许可。转载时请注明来源,以及原文链接

评论

  1. XXL
    Windows Chrome
    2 周前
    2024-4-09 11:24:01

    解决了,不过我用everything,直接搜到全部resolver-status.properties,都删了

    • 博主
      XXL
      Windows Edge
      2 周前
      2024-4-09 11:38:41

      哈哈 是的,我平常也这么干。调试还是为了研究学习,看看问题具体是什么原因导致的

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
呼呼
派蒙
巴巴托斯
上一篇
下一篇