Maven清理本地仓库损坏依赖以及无效jar包

发布时间 2023-11-15 14:39:06作者: 几迟秋

Maven清理本地仓库损坏依赖以及无效jar包

maven的本地仓库开启自动导包后, 时间久了经常会出现一堆未下载完成的jar包和一些error、unknown文件夹, 导致本地仓库越来越大, 有时甚至会导致maven导包不成功。这时候就需要手动清理一下这些下载不完全的jar包和错误的文件夹。

Windows环境解决方式

这里可以建立一个bat批处理文件方便清理。步骤如下:

  1. 新建一个记事本文件取名叫cleanmaven
  2. 复制如下代码到记事本中 #注意更改代码中的路径
  3. 将记事本后缀改为.bat然后保存双击运行
set REPOSITORY_PATH=这里填你的本地仓库路径如(F:\maven\repository)
rem Searching now...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
    del /s /q %%i
)
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*unknown*"') do (
    rmdir /s /q %%i
)
rem Clean success
pause

Linux环境解决方式

编写一个Shell脚本,并使用Cron等计划任务管理器自动运行该脚本

以下是一个删除Maven本地仓库中损坏依赖的示例Shell脚本:

#!/bin/bash

# 设置Maven本地仓库路径
repository_path=~/.m2/repository

# 遍历本地仓库,查找损坏的依赖
find "$repository_path" -type f -name "*.jar" -exec sh -c '
  for jar do
    # 使用mvn命令检查依赖是否损坏
    if ! mvn dependency:analyze -DignoreNonCompile=true -f /dev/null -Dmaven.repo.local="$repository_path" -Dartifact="$jar" >/dev/null 2>&1 ; then
      echo "删除损坏的依赖: $jar"
      rm -f "$jar"
    fi
  done
' sh {} +

echo "删除操作已完成。"

保存以上脚本代码至一个文件(例如 clean-maven-repo.sh),并使用chmod命令赋予脚本执行权限:

chmod 777 clean-maven-repo.sh

运行该脚本,它会自动遍历Maven本地仓库,并检查每个JAR文件是否损坏。如果发现损坏的依赖,脚本会将其删除,然后输出删除操作完成的消息。请注意,由于重新下载依赖可能会需要一些时间,因此启动此脚本可能需要等待一段时间。

为了自动化执行此脚本,您可以使用计划任务管理器Cron来定期运行此脚本。您可以编辑Cron的配置文件,添加以下一行:

0 0 * * * /bin/bash /path/to/clean-maven-repo.sh

该行表示每天半夜12点运行该脚本一次,您可以根据需要修改时间以及Shell脚本的路径。

这样,Cron就会在指定的时间运行该脚本,自动删除损坏的依赖

Linux环境可能会出现的问题:

[root@localhost sh]# sh clean-maven-repo.sh 
clean-maven-repo.sh:行2: $'\r': 未找到命令
clean-maven-repo.sh:行5: $'\r': 未找到命令
find: 遗漏“-exec”的参数
clean-maven-repo.sh:行16: $'\r': 未找到命令
删除操作已完成。
[root@localhost sh]#

这个错误通常是由于在Windows系统上编辑脚本并在Linux系统上运行导致的换行符不兼容引起的。

为了解决该问题,您可以使用dos2unix命令来转换脚本文件的换行符。请按照以下步骤操作:

  1. 在Linux系统上安装dos2unix工具。可以使用以下命令:

    sudo apt-get install dos2unix
    
  2. 执行以下命令来转换脚本文件的换行符:

    dos2unix clean-maven-repo.sh
    
  3. 确保您的脚本文件再次具有可执行权限:

    chmod 777 clean-maven-repo.sh
    

此时,您应该再次尝试运行脚本