java删除引用的库_java-如何从Maven存储库中清除旧的依赖项?

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Maven是一个强大的目构建工具,它提供了一个管理和组织Java目所需依赖的机制。Maven存储这些依赖的地方。有时候,仓库中的jar包可能会损坏或者变得无效,为了确保构建过程的稳定性和准确性,我们需要定期清除这些损坏的jar包。 Maven提供了一个命令来清理本地仓库中的无效或损坏的依赖。该命令是"mvn dependency:purge-local-repository"。当执行该命令时,Maven会扫描本地仓删除任何损坏的jar包。 此外,Maven还可以配置自动清理本地仓库中的损坏jar包。我们可以在目的pom.xml文件中配置一个插件,以定期清理本地仓。例如,使用"Maven Dependency Plugin"插件来完成此操作。我们可以配置该插件在构建过程中执行,或者设置一个特定的时间(例如每天凌晨)来自动清理本地仓。 例如,在pom.xml文件中添加以下插件配置: ``` <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <id>purge-local-repository</id> <phase>clean</phase> <goals> <goal>purge-local-repository</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ``` 该配置将在执行"mvn clean"命令之后自动清理本地仓库中的损坏jar包。 通过定期清理Maven库中的损坏jar包,我们可以确保目构建的稳定性和准确性,同时节省存储空间。 ### 回答2: Maven是一个用于存储和管理Java依赖的地方,其中包含了目所需的各种jar包和其他资源文件。有时候,由于网络传输错误、服务器故障或其他原因,仓库中可能会出现损坏的jar包。 为了解决这个问题,Maven提供了一个自动清除损坏的jar包的机制。当Maven尝试从远程仓下载依赖时,会根据SHA-1或MD5哈希值对jar包进行验证。如果验证失败,说明该jar包已经损坏,Maven会自动将其从仓库中删除,并重新从远程仓下载正确的版本。 除了自动验证和清除,开发者也可以手动清除损坏的jar包。在Maven的本地文件系统中,每个依赖都有一个对应的文件夹,其中包含了jar包和一些元数据文件。开发者可以浏览这些文件夹,查找并手动删除已知的损坏的jar包。 总而言之,Maven提供了自动清除损坏的jar包的机制,通过验证哈希值来判断是否损坏,并删除并重新下载正确的版本。这个机制可以保证依赖的完整性和正确性,提高目构建和部署的可靠性。同时,开发者也可以手动清除已知的损坏的jar包,以确保仓的整洁和正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值