跳转至

如何强制 Maven 重新检查本地缓存?


2024-10-02 by dongnan

开始之前

使用 Maven 构建项目时,Maven 会首先检查本地仓库(.m2目录)中是否已经存在所需的依赖。如果存在则直接使用缓存。

如果本地仓库中没有找到,Maven 才会去远程仓库(如 Maven 中央仓库或其他配置的镜像仓库)下载依赖。

环境描述

  • OS: Ubuntu Server 20.04 LTS
  • Docker: 19.03.15
  • Docker-compose: 1.29.2
  • Jenkins: 2.452.2 LTS
  • Maven: 3.6 (使用 Jenkins 工具插件安装)

问题描述

jenkins 项目构建日志提示找不到 jar 包:

Failed to execute goal on project exxr-gateway: Could not resolve dependencies for project com.cosmo:exxr-gateway:jar:1.2.1-SNAPSHOT: 
Failed to collect dependencies at org.springframework.cloud:spring-cloud-starter-gateway:jar:2.2.5.RELEASE -> 
org.springframework.boot:spring-boot-starter-webflux:jar:2.2.11.RELEASE -> 
org.springframework.boot:spring-boot-starter-reactor-netty:jar:2.2.11.RELEASE -> 
io.projectreactor.netty:reactor-netty:jar:0.9.13.RELEASE -> 
io.netty:netty-transport-native-epoll:jar:linux-x86_64:4.1.53.Final -> 
io.netty:netty-transport-native-unix-common:jar:4.1.53.Final: Failed to read artifact descriptor for io.netty:netty-transport-native-unix-common:jar:4.1.53.Final:
Could not transfer artifact io.netty:netty-transport-native-unix-common:pom:4.1.53.Final from/to alimaven xxx:

但是可以在 .m2 缓存目录找到该包:

$ ls ~/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.53.Final

注意 _remote.repositories 这个文件:

_remote.repositories  netty-transport-native-unix-common-4.1.53.Final.jar.sha1  netty-transport-native-unix-common-4.1.53.Final.pom.sha1
netty-transport-native-unix-common-4.1.53.Final.jar  netty-transport-native-unix-common-4.1.53.Final.pom

错误原因

从日志和缓存目录来看,io.netty:netty-transport-native-unix-common:jar:4.1.53.Final 依赖已经下载到本地,但 Maven 仍然尝试从远程仓库下载该依赖的 POM 文件。

这可能是因为 .m2 目录中的 _remote.repositories 文件中存在不正确的记录,导致 Maven 认为该依赖需要从远程仓库下载。

解决方法

尝试删除 (提前备份) netty-transport-native-unix-common 的目录中的 _remote.repositories 文件。 这将强制 Maven 重新检查本地缓存,而不去远程仓库下载。

验证

再次使用 jenkins 构建项目

参考文档

  • ChatGPT
回到页面顶部