本文目录导读:

- 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等)
- 网络依赖:如果清理了正在使用的依赖,下次构建时会重新下载
- 磁盘空间:清理后可以释放大量磁盘空间
选择适合你操作系统的脚本使用即可!