我在.m2文件夹中有太多文件,其中maven存储下载的依赖项。有没有办法清理所有旧的依赖项?例如,如果存在3个不同版本的依赖关系:1,2和3,清理后必须只有第3个版本。我如何为.m2文件夹中的所有依赖项执行此操作?
如果您使用的是Unix,则可以使用其中文件的访问时间。只需为您的文件系统启用访问时间,然后运行您希望保留依赖关系的所有项目的干净构建,然后执行类似这样的操作(UNTESTED!):
find ~/.m2 -amin +5 -iname '*.pom' | while read pom; do parent=`dirname "$pom"`; rm -Rf "$parent"; done
这将找到所有* .pom文件,这些文件最后一次访问时间超过5分钟(假设你最近5分钟前开始构建)并删除它们的目录。
在rm之前添加“echo”以进行“干运行”。
简短回答 - 在{user.home}
中删除了.m2文件夹。例如。在Windows 10用户家是C:\Users\user1
。使用mvn clean package
重建您的项目。只保留那些项目所需的依赖项。
长答案 - .m2文件夹就像普通文件夹一样,文件夹的内容是从不同的项目构建的。我认为没有办法自动弄清楚哪个库是“旧的”。事实上,旧的是一个模糊的词。在项目中使用先前版本的库时可能有很多原因,因此无法确定哪一个未使用。
您所能做的就是删除.m2文件夹并重新构建所有项目,然后该文件夹将自动构建所有必需的库。
如果您只关心在所有项目中使用的特定版本的库;重要的是项目的pom也应该更新到最新版本。即,如果不同的POM引用库的不同版本,则所有将在.m2中下载。
给定maven项目的POM文件,您可以使用Apache Maven Dependency Plugin删除本地存储库中的所有依赖项(默认情况下为〜/ .m2 / respository)。
它包含dependency:purge-local-repository
功能,可从本地存储库中删除项目依赖项,并可选择重新解析它们。
要清除本地依赖项,您只需使用可选参数reResolve并将其设置为false,因为默认情况下它设置为true。
此命令行调用应该工作:
mvn dependency:purge-local-repository -DreResolve=false
find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
mv ~/.m2 ~/saved-m2
find . -type f -name "maven-metadata-central.xml*" -exec rename -v -- 's/-central//' '{}' \;
<settings>
<mirrors>
<mirror>
<id>mycentral</id>
<name>My Central</name>
<url>file:/home/user/saved-m2/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
我也想从我的Maven存储库中删除旧的依赖项。我想过只运行Florian的答案,但是我想要一些我可以反复运行的东西,而不记得一个长的linux片段,我想要一些具有一点可配置性的东西 - 更多的是程序,而不是一串unix命令所以我采用了基本的想法并将其变成了一个(相对较小的)Ruby程序,它根据上次访问时间删除旧的依赖项。
它不会删除“旧版本”,但由于您实际上可能有两个不同的活动项目,其中包含两个不同版本的依赖项,因此无论如何都不会完成我想要的操作。相反,像Florian的回答一样,它删除了最近未访问的依赖项。
如果你想尝试一下,你可以:
bin/mvnclean
有一些选项可以覆盖默认的Maven存储库,忽略文件,设置阈值日期,但是您可以在GitHub上的README中阅读这些选项。
在我完成了一些工作之后,我可能会在某些时候将它打包为Ruby gem,这将简化问题(gem install mvnclean; mvnclean
),如果你已经安装了Ruby并且可以运行。
只需清理.m2 - > repository文件夹下的每个内容。当您构建项目时,所有依赖项都会加载到此处。
在您的情况下,您的项目可能是您之前使用旧版本的任何依赖项,现在版本已升级。所以更好地清理.m2文件夹并使用mvn clean install构建项目。
现在,将在此文件夹中下载与最新版本模块的依赖项。
我想出了一个实用程序,并在GitHub上托管,以清理本地Maven存储库中的旧版本库。该实用程序在其默认执行时会删除所有旧版本的工件,只留下最新版本。 (可选)它可以删除所有快照,源,javadoc,还可以在此过程中强制/排除组或工件。此跨平台还支持基于上次访问/下载日期的基于日期的删除。
您需要复制项目所需的依赖项。掌握这些内容后,请清除项目中POM.XML文件中嵌入到<dependency>
标记中的所有<dependencies>
标记。
保存文件后,您将无法在Libraries
中看到Maven Dependencies。然后请粘贴您之前复制的那些<dependency>
。
所需的罐子将由Maven自动下载,您可以在保存文件后在生成的Maven Dependencies Libraries
中看到。
谢谢。