首页 > 编程语言 >java.lang.IllegalArgumentException: Malformed \uxxxx encoding — 记一次mvnDebug过程

java.lang.IllegalArgumentException: Malformed \uxxxx encoding — 记一次mvnDebug过程

时间:2023-09-20 11:55:42浏览次数:51  
标签:lang uxxxx java 文件 idea maven debug 日志 源代码

本文唯一发布网站 博客园(官网地址:https://www.cnblogs.com/)

本文地址:https://www.cnblogs.com/zeromi/p/17716933.html

前情提要

有天需要写个东西,需要翻一下老代码,使用idea打开一个很久没打开的项目,然后不知道为啥到处飘红
在查看了项目的External Labraries列表,发现包都有,再看下项目jdk设置,没错啊,还是万年的jdk8,mvn设置3.6.3

 

我尝试了以下办法

1. maven 刷新(重新导入) 无效
2. idea重新导入项目 无效

只能老办法,上百度了,直接复制报错关键信息,"Malformed \uxxxx encoding",在百度的搜索结果里屎里淘金

csdn的搜索结果最靠前,但是大多数只是简单的说了下自己做了啥操作解决了,答案也基本千篇一律,偶尔有个特别的也没说清楚(csdn大部分时候浪费时间简直是)

cnblogs(博客园)只搜到一篇相关,但也没能解决问题

总结下来就是:
删除本地maven仓库里面的 resolver-status.properties和xxxxx.lastupdate文件,这两操作都没能解决问题
后面搜到了stackflow上的这个问题贴,感觉之前看的那些贴都是看了这个帖写的(合理怀疑)

stackflow上的问题贴

(主要我在网上搜到的大多数相关的解决方法基本都在这个帖子中)
https://stackoverflow.com/questions/68003423/java-lang-illegalargumentexception-malformed-uxxxx-encoding-while-mvn-install

apache相关问题帖(stackflow上面说是maven的一个bug)
https://issues.apache.org/jira/browse/MRESOLVER-216


帖子提供的办法:
1. 删除本地maven仓库里面的 resolver-status.properties和xxxxx.lastupdate文件

find ~/.m2/ -name resolver-status.properties -delete

2. 直接删除本地仓库中所有存在该字符的文件或者直接删除本地库中的全部文件(未尝试,不想删除整个本地库重新下载,太浪费时间了)

grep -lrnw /else/where -e '\u0000' | xargs rm

3. 自己debug

根据stackflow的问题帖上评论里的maven debug方法最终找到问题

我的问题排查过程

1. 首先需要确定问题原因:

在idea里面使用mvn compile -X,-X表示打印debug日志,重现一下错误,根据打印日志,确定是读取某个文件出现错误

2. 找到这个文件:

根据maven编译的打印日志从子模块bus开始报错,然后中断编译了,所以重点排查bus子模块

3. 准备maven debug

3.1首先去maven官网下载相同版本的maven源代码(比如我的项目用的maven-3.6.3),使用idea将解压后的maven源代码导入

3.2新建一个使用idea新建一个RemoteDebug启动配置(java远程调试,我用的idea2023.2社区版,使用的New UI)

 

 

4. 打开报错的项目,使用命令行进行maven 调试模式编译

4.1底部打开命令行(也可以自己打开项目代码根据目录,直接cmd,需要使用本地maven,如果你的项目使用idea自带的maven可能无法执行下列操作)

 

4.2然后直接执行命令

mvnDebug -s D:\ProgramFiles\maven\conf\settings_aliyun.xml compile -X

说明:mvnDebug是mvn的调试启动命令,看启动脚本可以发现其实就是开启了一个远程调试端口
-s 是指定maven的配置文件
-X 是打印debug日志

5.启动maven Debug

切换到maven源码项目,启动第3步新建的debug配置,这时候会发现debug跑了一下很快结束了,因为你没有打断点
5.1 但是入口都没找到在哪,怎么打断点呢,直接看maven编译时的错误日志,根据错误堆栈信息,往上追溯maven源代码的包名

5.2 在maven源代码项目中直接找到这个包中报错的那个类并在相应方法下下断点就可以让maven调试时进入断点

5.3 重复第4,5步操作,最终定位到出错文件
(E:\MavenRepository\org\springframework\boot\spring-boot-starter-amqp\2.2.13.RELEASE\_remote.repositories)
使用记事本(我用的notepad--)打开发现文件末尾出现了大量的不可见字符,删除这些多余的字符,根据其他目录中的文件样式,保留末尾一个空行。

6. 重试maven编译,解决问题

标签:lang,uxxxx,java,文件,idea,maven,debug,日志,源代码
From: https://www.cnblogs.com/zeromi/p/17716933.html

相关文章

  • java代码访问网页
    importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.URL;importjava.net.HttpURLConnection;publicclassWebPageAccess{publicstaticvoidmain(String[]args){Stringurl="http://example.com";//输入要访......
  • Java 21 新特性:switch的模式匹配
    在之前的Java17新特性中,我们介绍过关于JEP406:switch的模式匹配,但当时还只是关于此内容的首个预览版本。之后在JDK18、JDK19、JDK20中又都进行了更新和完善。如今,在JDK21中,该特性得到了最终确定!下面,我们就再正式学习一下该功能!在以往的switch语句中,对于case中的类型匹配限......
  • java在try-catch-finally代码块中return或者throw Exception时需注意的问题
    在Java的try-catch-finally代码块中使用return或者throwException时,需要注意以下几个问题:1.Return语句的执行:当在try或catch中使用return语句时,程序会立即退出当前方法并返回指定的值。但是在执行return之前,finally代码块将被执行。如果finally中也包含retur......
  • JAVA-基本程序设计结构(类变量、main语法、代码块、final关键字、抽象类)
    1.类变量和类方法1.类变量1.类变量的定义和语法1.类变量(静态变量/静态属性/静态字段)是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量2.定义语法:访问修饰符static数据类型变量名;[推......
  • java中string与byte[]的转换
    1.string转byte[]byte[]midbytes=isoString.getBytes("UTF8");//为UTF8编码byte[]isoret=srt2.getBytes("ISO-8859-1");ISO-8859-1编码ISO-8859-1为单字节的编码2.byte[]转stringStringisoString=newString(byte......
  • group by 用java代码实现
    importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Map.Entry;publicclassListGroup{publicstaticvoidmain(String[]args){List<JavaBean>list=newArrayList<JavaB......
  • java日期操作
    将Date类型写入数据库的两种方法先了解几个类: 1、具体类(和抽象类相对)java.util.Date 2、抽象类java.text.DateFormat和它的一个具体子类,java.text.SimpleDateFormat 3、抽象类java.util.Calendar和它的一个具体子类,java.util.GregorianCalendar......
  • Java验证电子邮箱地址、电话号码
    demo1:/***本类用于处理、检查导入数据的格式*@authorAdministrator*weiwenshuai20110915*/publicclassCheckData{/***验证手机号码、电话号码是否有效*手机号前面加86的情况也考虑*新联通*(中国联通+中国网通)手机号码开头数字130、1......
  • 66基于java的志愿者服务管理系统设计与实现(配套lun文,PPT,可参考做毕业设计)
    本章节给大家带来一个基于java志愿者服务管理系统设计与实现,可适用于校园志愿者活动服务平台,校园爱心志愿者活动,爱心活动管理信息系统,大学志愿者服务平台,大学生志愿者服务平台,大学生爱心活动系统,在线志愿者活动平台,校园志愿者活动,大学志愿者活动平台等等;引言现如今,校园志愿者......
  • java将map的key转为大写
    普通的stream流,toMap方法会调用merge方法,该方法如果value传值为null的时候,会报空指针异常,因此直接使用collect()方法进行规约操作publicstaticvoidmain(String[]args){Map<String,String>testMap=newHashMap<>();testMap.put("apple",null);testMap.put("......