Loading... # Maven 缓存文件清理指南 ## Maven 缓存文件 在使用 `Maven` 的过程中, 难免会遇到依赖下载报错或者下载不下来的问题, 有时候是网络问题或者坐标错误导致的, 有时候是因为要下载的依赖在本地仓库中存在`.lastUpdated` 结尾的缓存文件 **例如:** ```bash ojdbc7-12.1.0.2.jar.lastUpdated fastjson2-2.0.50.pom.lastUpdated ``` `.lastUpdated` 文件一般是下载时的临时缓存文件当下载完成后会自动进行清理 当你发现你的本地仓库中的某个包的目录下存在 `.lastUpdated` 文件,那么这意味着发生了以下两种情况之一 **情况 1:Maven 正在下载这个包** 这种情况存在,但通常你遇到的不会是这种情况 因为配置国内的中央仓库镜像后,下载包的速度较快,再加上各个包的大小并不大,这种情况下缓存文件只存在极短的一瞬间,你碰巧能看到它的可能性不大 **情况 2:maven 下载这个包时因为某种原因失败** 如果你并没有在拉取依赖, 但是本地仓库的包中却一直存在这个缓存文件, 那么就是之前下载依赖时失败导致异常停止, 但是 `Maven` 又不会去清理这个下载失败后的缓存文件, 就导致此文件一直存在 ⚠ 这种情况会带来一个问题 因为 maven 不支持断点续传,而 `.lastUpdated` 文件既不可用又会导致 `Maven` 不进行清理后重新下载 所以,理论上来说,需要手动清除掉本地仓库中的 `.lastUpdated` 缓存文件,避免影响 `Maven` 下载和使用此依赖 ## 方式一: 手动删除 第一种清理方式就是手动删除这个以 `.lastUpdated` 结尾的缓存文件, 通过错误提示中的坐标在本地仓库中找到对应的包路径, 然后把对应版本中的缓存文件给删除掉后重新执行命令以拉取依赖 这种方式适用于明确知道具体的包路径和需要清理的缓存文件比较少的情况, 如果想一次性清理所有本地无效的缓存文件, 就可以使用脚本的方式来清理 ## 方式二: 脚本清理 (推荐) 由于第一种手动清理太过于局限性, 并且效率比较低, 这里还有第二种方式, 采用 `.bat` 脚本的方式来批量清理无效缓存文件 **内容如下:** 在仓库的同级目录下创建一个 `cleanLastUpdated.bat` 脚本文件用于清理缓存文件, 默认操作的路径为脚本所在文件夹及子文件夹 脚本代码: ```bat cls @echo off chcp 65001 > nul setlocal enabledelayedexpansion REM 获取脚本所在目录 set SCRIPT_DIR=%~dp0 set REPOSITORY_PATH=%SCRIPT_DIR% color 0C TITLE ClearLastUpdated For Windows GOTO MENU :MENU CLS ECHO. ECHO. * * * * * * ClearLastUpdated For Windows * * * * * * ECHO. * * ECHO. * * (0) 指定仓库 (默认为脚本所在目录) * ECHO. * * ECHO. * * (1) 清理 .lastUpdated 缓存文件 * ECHO. * * ECHO. * * (2) 查看 .lastUpdated 缓存文件 * ECHO. * * ECHO. * * (3) 统计 .lastUpdated 缓存文件 * ECHO. * * ECHO. * * (q) 退 出 * ECHO. * * ECHO. * * * * * * * * * * * * * * * * * * * * * * * * * * * ECHO. 当前仓库路径: %REPOSITORY_PATH% ECHO. ECHO. 请选择菜单序号: set /p ID= IF "%id%"=="0" GOTO specifyRepo IF "%id%"=="1" GOTO cmd1 IF "%id%"=="2" GOTO cmd2 IF "%id%"=="3" GOTO cmd3 IF "%id%"=="q" EXIT IF "%id%"=="Q" EXIT PAUSE GOTO MENU :specifyRepo :inputRepo ECHO. 请输入新的仓库地址: set /p NEW_PATH= if exist "%NEW_PATH%" ( set REPOSITORY_PATH=%NEW_PATH% ECHO. 仓库地址已更新为: !REPOSITORY_PATH! ) else ( ECHO. 目录不存在,请重试. GOTO inputRepo ) PAUSE GOTO MENU :cmd1 ECHO. 开始清理缓存文件... REM 获取开始时间 for /f "tokens=1 delims= " %%a in ('powershell -command "Get-Date -Format \"HHmmssfff\""') do set START_TIME=%%a REM 初始化计数器 set /a FILE_COUNT=0 REM 遍历并删除目标文件,同时增加计数器 for /r "%REPOSITORY_PATH%" %%i in (*.lastUpdated) do ( echo 删除文件: %%i del /s /q "%%i" set /a FILE_COUNT+=1 ) ECHO. 清理完成, 总共删除了 !FILE_COUNT! 个缓存文件 REM 获取结束时间 for /f "tokens=1 delims= " %%a in ('powershell -command "Get-Date -Format \"HHmmssfff\""') do set END_TIME=%%a REM 计算耗时 set /a DURATION=%END_TIME% - %START_TIME% if %DURATION% lss 0 set /a DURATION=%DURATION% + 1000000 ECHO. 耗时: !DURATION! 毫秒 PAUSE GOTO MENU :cmd2 ECHO. 查看 .lastUpdated 缓存文件列表 REM 初始化计数器 set /a FILE_COUNT=0 REM 遍历并显示目标文件,同时增加计数器 for /r "%REPOSITORY_PATH%" %%i in (*.lastUpdated) do ( ECHO. %%i set /a FILE_COUNT+=1 ) ECHO. 总共找到 !FILE_COUNT! 个缓存文件 PAUSE GOTO MENU :cmd3 ECHO. 统计 .lastUpdated 缓存文件数量 REM 初始化计数器 set /a FILE_COUNT=0 REM 遍历增加计数器 for /r "%REPOSITORY_PATH%" %%i in (*.lastUpdated) do ( set /a FILE_COUNT+=1 ) ECHO. 总共找到 !FILE_COUNT! 个缓存文件 PAUSE GOTO MENU ``` ### 使用脚本进行清理 创建好脚本后双击打开, 如果需要清理的缓存文件并不在当前脚本的同级或子级目录下 也可以手动指定一下需要操作的仓库地址 在清理缓存文件之前也可以先查询和统计目标文件夹中有多少个缓存文件, 确认无误后就进行清理  最后修改:2024 年 07 月 19 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 3 如果文章有帮助到你,请随意赞赏
5 条评论
建议补充性能优化方案,增强实用性。
建议补充国内外研究对比,以拓展视野。
技术伦理的探讨体现人文科技平衡意识。
文化符号解读精准,展现独特审美。
作者的情感表达细腻入微,让人在阅读中找到了心灵的慰藉。