怎么在本地Maven存储库损坏时强制更新

75次阅读
没有评论

共计 2272 个字符,预计需要花费 6 分钟才能阅读完成。

这篇文章主要介绍“怎么在本地 Maven 存储库损坏时强制更新”的相关知识,丸趣 TV 小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么在本地 Maven 存储库损坏时强制更新”文章能帮助大家解决问题。

1. 概述

为了实现这一点,我们将使用一个简单的示例来了解为什么存储库会损坏以及如何修复它。

2. 先决条件

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

3. Maven 仓库结构

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

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

4. 下载依赖

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

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

mvn packagemvn 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.31Purging 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 选项来单独解决我们项目的依赖项。

关于“怎么在本地 Maven 存储库损坏时强制更新”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注丸趣 TV 行业资讯频道,丸趣 TV 小编每天都会为大家更新不同的知识点。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-18发表,共计2272字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)