今天编译项目时遇到了这样一个错误:Malformed \uxxxx encoding
显然,有个文件损坏了,但是可惜的是 Maven 没有告诉我们到底是哪个文件损坏了。
可以直接扬了 .m2
本地仓库,但是成本太高。依赖很多的情况下,就国内的网络情况不拉个一晚上怕是拉不下来需要的依赖。
着手解决
首先切换到 Terminal 终端,cd 到故障 Maven 项目/模块 目录下面,使用 mvn package -X
重新触发一次编译。
这次可以看到,我们获得了更详细的错误,但是还是没有故障文件的路径。
因此,我们需要借助 IDE 的调试功能调试一下。首先分析下堆栈,对着蓝色的链接挨个点一遍,看看从哪里读取了一个 Properties 文件:
如图所示,在 DefaultUpdateCheckManager.java:250 的位置读入了一个 touchFile
,在对应那一行的前面点一下创建一个断点(出现红点)。
调试运行
为了使断点生效,则必须将 JVM 挂接到 IDE 上。最简单的方式是使用 IDE 的 “调试(DEBUG)”功能。
点击左上角的运行框,展开下拉菜单,选择 Edit Configurations...
来编辑调试配置文件。
点击左上角的 + 号按钮,添加新配置,选择 Maven。
在 Run(运行命令)的编辑框中输入我们刚刚使用的 package -X
命令。
在 Working Directory(工作目录)中选择出现故障的 Maven 项目/模块。
点击 OK,保存并关闭窗口。
启动调试
保存后,我们就可以在运行下拉框中找到刚刚创建的配置文件,选择 Debug(调试)方式运行。
Maven 运行后,很快到达我们设置的断点,检查我们想要知道的 touchFile
的值。
在资源管理器中找到这个文件,打开,检查是否损坏:
发现该文件存在大量的 \u0000
确定该文件损坏,删除,重新让 Maven 解决依赖,问题解决。
如果你打开的文件似乎没有损坏,可以继续运行调试,检查其他文件。
更简单的方法
直接把 .m2
目录下的所有子文件夹的所有 resolver-status.properties
一起删了,众生平等一起重新解决一遍依赖也是可以的。
.m2 目录在哪里
按下 Win+R 键,打开 “运行”,输入 %USERPROFILE%\.m2
,敲回车就可以了。