java-如何从Maven存储库中清除旧的依赖项?
我在.m2文件夹中有太多文件,maven在那里存储了已下载的依赖项。 有没有办法清除所有旧的依赖项? 例如,如果某个依赖项具有3个不同的版本:1、2和3,则清理后必须只有3rd。 如何为.m2文件夹中的所有依赖项执行此操作?
8个解决方案
31 votes
如果您使用的是Unix,则可以使用其中的文件访问时间。 只需为文件系统启用访问时间,然后对要保留依赖关系的所有项目运行一个干净的构建,然后执行以下操作(未测试!):
find ~/.m2 -amin +5 -iname '*.pom' | while read pom; do parent=`dirname "$pom"`; rm -Rf "$parent"; done
这将查找所有最近一次访问超过5分钟的* .pom文件(假设您最多在5分钟之前开始构建)并删除其目录。
在rm之前添加“ echo”以进行“空运行”。
Florian answered 2019-12-29T01:59:56Z
25 votes
简短答案-在{user.home}中删除了.m2文件夹。 在Windows 10用户主目录中为C:\Users\user1。使用mvn clean package重建项目。仅保留那些项目需要的依赖项。
长答案-.m2文件夹就像普通文件夹一样,该文件夹的内容是根据不同的项目构建的。 我认为没有办法自动找出哪个库是“旧的”。 实际上,old是一个模糊的词。 在项目中使用库的先前版本时,可能有很多原因,因此无法确定哪个库未使用。
您所要做的就是删除.m2文件夹并重新构建所有项目,然后该文件夹将自动使用所有必需的库进行构建。
如果您只关心在所有项目中使用的特定版本的库,请执行以下步骤: 重要的是,项目的pom也应该更新到最新版本。 也就是说,如果不同的POM引用了该库的不同版本,则所有文件都将以.m2下载。
Gyanendra Dwivedi answered 2019-12-29T02:00:30Z
7 votes
给定一个Maven项目的POM文件,您可以使用Apache Maven Dependency Plugin删除其在本地存储库中的所有依赖关系(默认为〜/ .m2 / respository)。
它包括dependency:purge-local-repository功能,该功能可从本地存储库中删除项目依赖项,并有选择地重新解析它们。
要清理本地依赖项,您仅需使用可选参数reResolve并将其设置为false,因为默认情况下将其设置为true。
此命令行调用应该工作:
mvn dependency:purge-local-repository -DreResolve=false
Juanjo Marron answered 2019-12-29T02:01:04Z
4 votes
下载项目的所有实际依赖项
find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
将本地Maven存储库移动到临时位置
find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
将所有文件maven-metadata-central.xml *从保存的存储库重命名为maven-metadata.xml *
find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
要将修改后的本地存储库副本设置为镜像,请创建目录〜/ .m2和文件〜/ .m2 / settings.xml,其中包含以下内容(用用户名替换用户):
find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
再次解决您的项目依赖项:
find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
现在,您有了本地的maven存储库,其中包含最少的必需工件。 从配置文件和文件系统中删除本地镜像。
Sergey B. answered 2019-12-29T02:02:08Z
2 votes
我想出了一个实用程序,并将其托管在GitHub上,以清理本地Maven存储库中的旧版本库。 该实用程序在默认执行时会删除所有较旧版本的工件,仅保留最新版本。 (可选)它可以删除所有快照,源,javadocs,并且在此过程中可以强制/排除组或工件。 该跨平台还支持基于上次访问/下载日期的基于日期的删除。
[https://github.com/techpavan/mvn-repo-cleaner]
Pavan Kumar answered 2019-12-29T02:02:33Z
1 votes
我也想从我的Maven存储库中删除旧的依赖项。 我本来只是想运行Florian的答案,但我想要的是可以一遍又一遍地运行而又不记得很长的linux代码段的东西,并且我想要一些具有可配置性的东西-更多的是程序,更少的unix命令链 ,因此我采用了基本思想,并将其放入了一个(相对较小的)Ruby程序中,该程序会根据旧的依赖项的上次访问时间删除它们。
它不会删除“旧版本”,但是由于您实际上可能具有两个不同版本的依赖项而具有两个不同的活动项目,所以无论如何我都不会做。 而是像Florian的答案一样,它删除了最近未访问的依赖项。
如果您想尝试一下,可以:
访问GitHub存储库
克隆存储库,或下载源
(可选)检查代码以确保它不是恶意的
运行gem install mvnclean; mvnclean
有一些选项可以覆盖默认的Maven存储库,忽略文件,设置阈值日期,但是您可以在GitHub的README中阅读这些选项。
在完成一些工作之后,我可能会在某个时候将其打包为Ruby gem,如果您已经安装并可以运行Ruby,这将简化事情(gem install mvnclean; mvnclean)。
Geoffrey Wiseman answered 2019-12-29T02:03:30Z
1 votes
只需清理.m2-> repository文件夹下的所有内容。构建项目时,所有依赖项都将加载到此处。
在您的情况下,可能是您的项目之前使用的是任何依赖项的旧版本,而现在版本已升级。因此最好清理.m2文件夹并使用mvn clean install来构建项目。
现在,具有最新版本模块的依赖项将下载到此文件夹中。
Amandeep Singh Bhatia answered 2019-12-29T02:03:59Z
0 votes
您需要复制项目所需的依赖项。拿走这些标签后,请清除嵌入在标签中的所有Libraries标签从项目中的POM.XML文件中。
保存文件后,您将在Libraries中看不到Maven依赖关系。然后,请粘贴您先前复制的。
所需的jar将由Maven自动下载,您也可以在保存文件后生成的Maven依赖关系Libraries。
谢谢。
Shubhasish Bhunia answered 2019-12-29T02:04:32Z