JAVA

maven仓库清理缓存文件

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 文件产生的情况