如何强制 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