专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 一文看懂如何强制更新Maven

一文看懂如何强制更新Maven

更新时间:2021-12-22 10:05:04 来源:赢咖4 浏览8031次

1. 概述

在本教程中,我们将学习如何在本地Maven存储库损坏时强制更新它。为了实现这一点,我们将使用一个简单的示例来了解为什么存储库会损坏以及如何修复它。

2. 先决条件

要学习和运行本教程中的命令,我们需要使用Spring Initializr项目并安装 JDK 和 Maven。

3. Maven 仓库结构

Maven 将项目的所有依赖项保存在.m2文件夹中。例如,在下图中,我们可以观察Maven 存储库的结构:

我们可以看到,Maven 下载了存储库文件夹下的所有依赖项。因此,下载到我们的本地存储库是在运行时访问所有需要的代码所必需的。

4. 下载依赖

我们知道 Maven 基于pom.xml文件配置工作。当 Maven 执行这个pom.xml 文件时,依赖项将从中央 Maven 存储库下载并放入您本地的 Maven 存储库。如果我们的本地存储库中已有依赖项,Maven 将不会下载它们。

当我们执行以下命令时会发生下载:

mvn package
mvn install

以上都包括执行以下命令:

mvn dependency:resolve 

因此,我们可以在不使用包或安装的情况下单独解析依赖项,只需运行dependency:resolve命令。

5. 损坏的依赖

下载依赖项时,可能会发生网络故障,导致依赖项损坏。中断的依赖下载是损坏的主要原因。Maven 将相应地显示一条消息:

Could not resolve dependencies for project ...

接下来让我们看看如何解决这个问题。

6. 自动修复损坏的依赖

Maven 在通知构建失败时通常会显示损坏的依赖项:

Could not transfer artifact [artifact-name-here] ...

为了解决这个问题,我们可以使用自动或手动方法。此外,我们应该在调试模式下运行任何存储库更新,在-U之后添加-X选项以更好地了解更新期间发生的情况。

(1)强制更新所有 SNAPSHOT 依赖项

正如我们已经知道的,Maven 不会再次下载现有的依赖项。因此,要强制 Maven 更新所有损坏的 SNAPSHOT 依赖项,我们应该在命令中添加 -U/–update-snapshots选项:

mvn package -U
mvn install -U

不过,我们必须记住, 如果 Maven 已经下载了 SNAPSHOT 依赖项并且校验和相同,则该选项不会重新下载 SNAPSHOT 依赖项。

这也将打包或安装我们的项目。最后,我们将学习如何在不包含当前工作项目的情况下更新存储库。

(2)依赖解决目标

我们可以告诉 Maven 解决我们的依赖项并更新快照,而无需任何包或安装命令。为此,我们将使用依赖项:解决目标,包括-U 选项:

mvn dependency:resolve -U

(3)清除本地存储库目标

我们知道-U 只是重新下载损坏的 SNAPSHOT 依赖项。因此,在本地发布依赖项损坏的情况下,我们可能需要更深层次的命令。为此,我们应该使用:

mvn dependency:purge-local-repository

(4)清除本地存储库选项

通过为resolutionFuzziness选项指定“ groupId”和使用include选项搜索的确切组 ID,可以将清除本地存储库配置为仅针对特定组的依赖项运行:

mvn dependency:purge-local-repository -Dinclude:org.slf4j -DresolutionFuzziness=groupId -Dverbose

该resolutionFuzziness选项的值可以是:版本,artifactId的,的groupId,文件。

上面的示例将搜索并清除org.slf4j组中的所有工件。我们还设置了详细选项,以便我们可以查看已删除工件的详细日志。

如果找到任何符合条件的文件,日志将显示如下文本:

Deleting 2 transitive dependencies for project [...] with artifact groupId resolution fuzziness
[INFO] Purging artifact: org.slf4j:jul-to-slf4j:jar:1.7.31
Purging artifact: org.slf4j:slf4j-api:jar:1.7.31 

请注意,要指定包含或排除的工件以进行删除或刷新,我们可以使用选项包含/排除:

mvn dependency:purge-local-repository -Dinclude=com.yyy.projectA:projectB -Dexclude=com.yyy.projectA:projectC

7. 手动删除存储库

尽管-U选项和purge-local-repository可能会在不刷新所有依赖项的情况下解决损坏的依赖项,但手动删除 . m2本地存储库将导致强制重新下载所有依赖项。

这在具有旧的和可能损坏的依赖项时很有用。然后一个简单的重新打包或重新安装就可以完成这项工作。此外,我们可以使用dependency:resolve选项来单独解决我们项目的依赖项。

8. 结论

在本教程中,我们讨论了强制更新本地存储库的 Maven 选项和目标。

使用的示例是简单的 Maven常用命令,可以在配置了正确pom.xml 的任何项目上使用。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>