今天接手一个新项目,在使用 maven 构建过程中出现了错误,记录一下
mvn compile
失败提示如下:
[INFO] Building promise-api 4.2.2-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.203 s
[INFO] Finished at: 2024-02-27T17:04:33+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Malformed \uxxxx encoding.
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
遂跟着错误提示增加 -X 来debug:
mvn compile -X
这次提示:
[DEBUG] Could not find metadata com.axiba.bone:bone-common-api:1.0-SNAPSHOT/maven-metadata.xml in local (/Users/ss/develop/maven-repository)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.215 s
[INFO] Finished at: 2024-02-27T17:00:49+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Malformed \uxxxx encoding.
java.lang.IllegalArgumentException: Malformed \uxxxx encoding.
at java.util.Properties.loadConvert (Properties.java:574)
at java.util.Properties.load0 (Properties.java:390)
at java.util.Properties.load (Properties.java:341)
at org.eclipse.aether.internal.impl.TrackingFileManager.read (TrackingFileManager.java:56)
...
很好,关键信息:
Could not find metadata com.axiba.bone:bone-common-api:1.0-SNAPSHOT/maven-metadata.xml in local (/Users/ss/develop/maven-repository)
删掉jar包所在文件夹, 重新从仓库下载 搞定!
什么原因呢?是因为这个 jar 下载不完整导致, 有没有更简单的解决办法, 毕竟当有多个jar存在这样的问题时 debug 日志会很多很多,手动删除会疯掉
使用英文搜索了一下,发现stackoverflow 上早有人回答类似的问题,跟着题解操作很简单:
- 使用下面的命令可以找到存在此类问题的文件:
注意:~/.m2 是maven的仓库位置,这个目录的配置是在
~/.m2/settings.xml
文件中的localRepository
标签中
执行命令时,需要将其替换为自己配置的仓库地址
grep -rnw ~/.m2 -e '\u0000'
- 当然找到之后要删除的,可以使用下面的命令处理:
grep -lrnw ~/.m2 -e '\u0000' | xargs rm
- 如果 maven 仓库中有大量文件,可以使用查找命令加快删除速度:
find ~/.m2 -name "resolver-status.properties" -exec grep -H -e '\u0000' {} \; | sed -r 's/:.*$//g' | xargs rm