1.背景
使用过maven的人都应该知道,maven下载jar包时,有时由于网络问题,会造成文本未下载完毕,残留.lastUpdated文件,下次使用pom时,由于该jar包已被cached缓存,又无法更新;特别是残留的文件比较多时,一个个手动去删更是费时;
2.解决方案
使用dos批处理脚本去查找maven仓库下的所有.lastUpdated文件,并删除该文件所在的文件夹。删除完毕后,下次网络正常时下载jar包就没问题了。即使删错了几个文件夹(其中有个确认步骤,如果担心删除错了,可以查看lastUpdated.txt,这个文件中存储着所有.lastUpdated相关的文件路径,后续根据这个进行删除),也不会有关系,maven会重新下载。
3.脚本文件
在windows下新建一个.bat文件,内容如下,保存后使用管理员权限运行。
@echo off @rem 切换到要删除的路径下 set /p input=请输入maven仓库路径: set mavenDir=%input% %mavenDir:~0,1%: cd %mavenDir% echo 在%mavenDir%路径下已查找到所有以.lastUpdated结尾的文件 dir /s/b .\*.lastUpdated>lastUpdated.txt echo 查找到的文件信息:%mavenDir%\lastUpdated.txt echo 请查看lastUpdated.txt,确认是否删除.lastUpdated文件所有目录,按任意键确认删除. pause>null @rem 遍历lastUpdated.txt文件,删除文件所在目录 for /f "delims=" %%i in (lastUpdated.txt) do ( echo 文件记录:%%i rd /s /q %%~dpi echo 删除目录:%%~dpi ) echo 成功删除所有.lastUpdated文件所在文件夹! del lastUpdated.txt echo 已清除临时文件%mavenDir%\lastUpdated.txt pause>null del null
windows脚本2
# windows脚本 @echo off rem create by NettQun rem 这里写你的仓库路径 set REPOSITORY_PATH=D:\Java\maven-repository\maven-aliyun\repository rem 正在搜索... for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do ( echo %%i del /s /q "%%i" ) rem 搜索完毕 pause
4.运行效果
lastUpdated.txt位于maven仓库根目录下(命令行中会显示全路径名称),内容大概为:
5.macOS 批量删除 maven 本地仓库的 lastUpdated 文件
find ~/.m2/repository -name "*.lastUpdated" | xargs rm
# linux脚本 # 这里写你的仓库路径 REPOSITORY_PATH=~/Documents/tools/repository echo 正在搜索... find $REPOSITORY_PATH -name "*lastUpdated*" | xargs rm -fr echo 搜索完
默认情况下 maven 本地仓库的根目录是 ~/.m2/repository
lastUpdated 文件一般是网不好时下载产生的临时文件,但是这个文件如果不删,那么重新下载就会失败,可以配一下国内的 maven 仓库镜像,以减少 lastUpdated 文件产生的情况