简介

        本文介绍解决was cached in the local repository, resolution will not be reattempted until the update ...的方法。

问题描述

用maven打包时,发现如下报错:

[ERROR] Failed to execute goal on project xxx: Could not resolve dependencies for project xxx:jar:0.0.1: Failure to find yyy:zzz:jar:1.0.0 in http://xxx:8081/nexus/content/groups/public was cached in the local repository, resolution will not be reattempted until the update interval of nexus has elapsed or updates are forced -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

原因分析

        Maven默认会使用本地缓存的库来编译工程,对于上次下载失败的库,maven会在~/.m2/repository/<group>/<artifact>/<version>/目录下创建xxx.lastUpdated文件。

        一旦这个文件存在,那么在直到下一次nexus更新之前都不会更新这个依赖库。

解决方案

方案1:maven命令后加-U参数

如:mvn clean package -U

详解

-U参数会强制update本地的jar(不用再专门去删除)

-U,--update-snapshots :
Forces a check for missing releases and updated snapshots on remote repositories.

方案2:删除*.lastUpdated文件

删除~/.m2/repository/对应目录或目录下的*.lastUpdated文件,然后再次运行maven命令

方案3:repository添加updatePolicy属性

        可以强制每次都更新依赖库,方法是:将repository标签添加如下属性:

<updatePolicy>always</updatePolicy>

updatePolicy可以设置为”always”、”daily” (默认)、”interval:XXX” (分钟)或”never”。

可以在pom.xml或者settings.xml里修改。

例如:

<repositories>
<repository>
<id>io.spring.repo.maven.release</id>
<url>http://repo.spring.io/release/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots><enabled>false</enabled></snapshots>
</repository>
</repositories>