本文目录导读:

- Windows Batch 版本 (clean-maven.bat)
- PowerShell 版本 (clean-maven.ps1)
- Linux/Mac Shell 版本 (clean-maven.sh)
- 使用说明:
- 进阶脚本:自定义清理策略 (clean-maven-advanced.sh)
- 定时清理(可选)
- 注意事项
我来帮你写一个自动清理Maven本地仓库的脚本,根据不同的操作系统,我提供以下几个版本:
Windows Batch 版本 (clean-maven.bat)
@echo off
chcp 65001 >nul
:: Maven本地仓库路径
set MAVEN_REPO=%USERPROFILE%\.m2\repository
:: 清理日志文件
echo 开始清理Maven本地仓库...
echo 仓库路径: %MAVEN_REPO%
:: 清理lastUpdated文件
echo 清理*.lastUpdated文件...
del /s /q "%MAVEN_REPO%\*.lastUpdated" 2>nul
:: 清理下载失败的临时文件
echo 清理临时文件...
for /d /r "%MAVEN_REPO%" %%d in (*.part) do (
if exist "%%d" (
rd /s /q "%%d"
echo 删除: %%d
)
)
:: 清理空的目录
echo 清理空目录...
for /f "delims=" %%d in ('dir /ad /s /b "%MAVEN_REPO%" ^| sort /r') do (
dir /a /b "%%d" 2>nul | findstr /v "^$" >nul || (
rd "%%d" 2>nul
echo 删除空目录: %%d
)
)
:: 清理特定版本的旧版本(保留最新版本)
echo 清理旧版本(只保留最新的3个版本)...
for /d %%a in ("%MAVEN_REPO%\*") do (
for /d %%b in ("%%a\*") do (
setlocal enabledelayedexpansion
set count=0
for /f "delims=" %%c in ('dir /ad /b /o-n "%%b"') do (
set /a count+=1
if !count! gtr 3 (
rd /s /q "%%b\%%c"
echo 清理旧版本: %%b\%%c
)
)
endlocal
)
)
echo.
echo 清理完成!
pause
PowerShell 版本 (clean-maven.ps1)
# Maven本地仓库路径
$mavenRepo = "$env:USERPROFILE\.m2\repository"
Write-Host "开始清理Maven本地仓库..." -ForegroundColor Green
Write-Host "仓库路径: $mavenRepo" -ForegroundColor Yellow
# 清理lastUpdated文件
Write-Host "清理*.lastUpdated文件..." -ForegroundColor Cyan
Get-ChildItem -Path $mavenRepo -Filter "*.lastUpdated" -Recurse -Force | Remove-Item -Force -ErrorAction SilentlyContinue
# 清理下载失败的临时文件
Write-Host "清理临时文件..." -ForegroundColor Cyan
Get-ChildItem -Path $mavenRepo -Filter "*.part" -Recurse -Force | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
# 清理空的目录
Write-Host "清理空目录..." -ForegroundColor Cyan
Get-ChildItem -Path $mavenRepo -Directory -Recurse -Force |
Where-Object { $_.GetFiles().Count -eq 0 -and $_.GetDirectories().Count -eq 0 } |
Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
# 清理特定版本的旧版本(保留最新3个版本)
Write-Host "清理旧版本..." -ForegroundColor Cyan
Get-ChildItem -Path $mavenRepo -Directory | ForEach-Object {
$groupDir = $_
Get-ChildItem -Path $groupDir.FullName -Directory | ForEach-Object {
$artifactDir = $_
$versions = Get-ChildItem -Path $artifactDir.FullName -Directory |
Sort-Object Name -Descending
if ($versions.Count -gt 3) {
$versions | Select-Object -Skip 3 | ForEach-Object {
Remove-Item -Path $_.FullName -Force -Recurse -ErrorAction SilentlyContinue
Write-Host "清理旧版本: $($_.FullName)" -ForegroundColor DarkGray
}
}
}
}
Write-Host "清理完成!" -ForegroundColor Green
Write-Host "按任意键退出..." -ForegroundColor Gray
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Linux/Mac Shell 版本 (clean-maven.sh)
#!/bin/bash
# Maven本地仓库路径
MAVEN_REPO="$HOME/.m2/repository"
echo "开始清理Maven本地仓库..."
echo "仓库路径: $MAVEN_REPO"
# 清理lastUpdated文件
echo "清理*.lastUpdated文件..."
find "$MAVEN_REPO" -name "*.lastUpdated" -type f -delete 2>/dev/null
# 清理下载失败的临时文件
echo "清理临时文件..."
find "$MAVEN_REPO" -name "*.part" -type d -exec rm -rf {} \; 2>/dev/null
find "$MAVEN_REPO" -name "*.part" -type f -delete 2>/dev/null
# 清理空的目录
echo "清理空目录..."
find "$MAVEN_REPO" -type d -empty -delete 2>/dev/null
# 清理特定版本的旧版本(保留最新3个版本)
echo "清理旧版本..."
for group_dir in "$MAVEN_REPO"/*/; do
if [ -d "$group_dir" ]; then
for artifact_dir in "$group_dir"*/; do
if [ -d "$artifact_dir" ]; then
# 获取排序后的版本列表
versions=($(ls -1v "$artifact_dir" 2>/dev/null | sort -r))
count=${#versions[@]}
if [ $count -gt 3 ]; then
# 删除除最新3个版本外的所有版本
for ((i=3; i<$count; i++)); do
version_path="${artifact_dir}${versions[$i]}"
if [ -d "$version_path" ]; then
rm -rf "$version_path"
echo "清理旧版本: $version_path"
fi
done
fi
fi
done
fi
done
# 再次清理可能产生的空目录
find "$MAVEN_REPO" -type d -empty -delete 2>/dev/null
echo ""
echo "清理完成!"
使用说明:
Windows 用户
- Batch版本:双击运行
clean-maven.bat或在CMD中执行 - PowerShell版本:右键
clean-maven.ps1→ 选择"使用PowerShell运行"
⚠️ PowerShell执行策略:如果遇到执行策略限制,使用管理员权限运行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Linux/Mac 用户
# 给脚本添加执行权限 chmod +x clean-maven.sh # 运行脚本 ./clean-maven.sh
进阶脚本:自定义清理策略 (clean-maven-advanced.sh)
#!/bin/bash
# 配置参数
MAVEN_REPO="$HOME/.m2/repository"
KEEP_VERSIONS=3 # 保留的最新版本数量
CLEAN_INTERVAL_DAYS=30 # 清理超过30天没有访问的依赖
echo "====== Maven仓库清理工具 ======"
echo "仓库路径: $MAVEN_REPO"
echo "保留版本数: $KEEP_VERSIONS"
echo "清理间隔: $CLEAN_INTERVAL_DAYS天"
echo "================================"
# 清理函数
clean_lastupdated() {
echo "1. 清理*.lastUpdated文件..."
find "$MAVEN_REPO" -name "*.lastUpdated" -type f -exec rm -f {} \; -printf "删除: %p\n"
}
clean_temporary() {
echo "2. 清理临时文件..."
find "$MAVEN_REPO" -name "*.part" -exec rm -rf {} \; -printf "删除: %p\n" 2>/dev/null
find "$MAVEN_REPO" -name "*.tmp" -exec rm -f {} \; -printf "删除: %p\n" 2>/dev/null
}
clean_old_versions() {
echo "3. 清理旧版本(保留最近$KEEP_VERSIONS个版本)..."
local cleaned=0
for group_dir in "$MAVEN_REPO"/*/; do
[ -d "$group_dir" ] || continue
for artifact_dir in "$group_dir"*/; do
[ -d "$artifact_dir" ] || continue
# 获取版本列表
versions=($(ls -1 "$artifact_dir" 2>/dev/null | sort -Vr))
count=${#versions[@]}
if [ $count -gt $KEEP_VERSIONS ]; then
for ((i=$KEEP_VERSIONS; i<$count; i++)); do
version_path="${artifact_dir}${versions[$i]}"
if [ -d "$version_path" ]; then
rm -rf "$version_path"
echo " [清理] $version_path"
((cleaned++))
fi
done
fi
done
done
echo " 共清理了 $cleaned 个旧版本"
}
clean_unused() {
echo "4. 清理超过${CLEAN_INTERVAL_DAYS}天未使用的依赖..."
find "$MAVEN_REPO" -atime +$CLEAN_INTERVAL_DAYS -type f -name "*.jar" \
-exec rm -f {} \; -printf "删除: %p\n" 2>/dev/null
}
clean_empty_dirs() {
echo "5. 清理空目录..."
find "$MAVEN_REPO" -type d -empty -delete -printf "删除空目录: %p\n" 2>/dev/null
find "$MAVEN_REPO" -type d -empty -delete 2>/dev/null # 再次清理
}
# 主函数
main() {
echo -e "\n开始清理..."
clean_lastupdated
clean_temporary
clean_old_versions
clean_unused
clean_empty_dirs
# 统计清理后的仓库大小
if [ -d "$MAVEN_REPO" ]; then
size=$(du -sh "$MAVEN_REPO" 2>/dev/null | cut -f1)
echo -e "\n仓库当前大小: $size"
fi
echo -e "\n清理完成!"
}
# 执行主函数
main
定时清理(可选)
Linux/Mac (添加crontab)
# 每月1号凌晨2点执行清理 crontab -e # 添加以下行 0 2 1 * * /path/to/clean-maven.sh >> /var/log/maven-clean.log 2>&1
Windows (任务计划程序)
- 打开"任务计划程序"
- 创建基本任务
- 设置触发器(如每周一凌晨3点)
- 操作选择启动程序:
clean-maven.bat
注意事项
- 备份重要依赖:建议在清理前确认没有正在使用的项目依赖
- IDE缓存:清理后建议重启IDE(如IntelliJ IDEA、Eclipse等)
- 网络依赖:如果清理了正在使用的依赖,下次构建时会重新下载
- 磁盘空间:清理后可以释放大量磁盘空间
选择适合你操作系统的脚本使用即可!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播