Maven错误:was cached in the local repository, resolution will not be reattempted until the update

本文介绍了当使用SpringBOM进行项目打包时遇到的问题及解决方法。主要原因是Maven使用了本地缓存失败的库。提供了三种解决方案:删除缓存、强制更新或修改updatePolicy。

问题及原因

今天在测试使用Spring BOM的时候,总发现项目无法打包成功。查看Maven的错误日志发现:

Non-resolvable import POM: Failure to find org.springframework:spring‐framework‐bom:pom:4.3.5.RELEASE in http://repo.spring.io/release/ was cached in the local repository, resolution will not be reattempted until the update interval of io.spring.repo.maven.release has elapsed or updates are forced @ line 29, column 19 -> [Help 2]

随即在StackOverFlow上查看了问题,发现主要是因为Maven默认会使用本地缓存的库来编译工程,而上次下载的库失败导致的。

解决办法

  1. 删除~/.m2/repository/对应目录或目录下的*.lastUpdated文件,然后再次运行maven命令
  2. maven命令后加-U,如mvn package -U
  3. 在repository的release或者snapshots版本中新增updatePolicy属性,其中updatePolicy可以设置为”always”、”daily” (默认)、”interval:XXX” (分钟)或”never”
<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>

参考资源

  1. http://stackoverflow.com/questions/4856307/when-maven-says-resolution-will-not-be-reattempted-until-the-update-interval-of/41391500#41391500
  2. http://maven.apache.org/ref/3.3.9/maven-settings/settings.html
<think>我们正在解决Maven构建过程中出现的依赖解析失败问题,具体表现为由于本地仓库缓存了失败的解析结果,导致在更新间隔期内Maven不会重新尝试解析。用户引用了多个类似错误的例子,核心问题一致:Maven在从远程仓库下载依赖失败后,会将此失败结果缓存到本地仓库,并且在默认的更新策略下不会立即重新尝试下载。解决方案核心思路:强制Maven重新尝试下载依赖,即忽略本地缓存,或调整更新策略。以下是具体步骤:1.**使用Maven命令强制更新快照依赖**:在Maven命令中添加`-U`或`--update-snapshots`选项,强制更新快照版本依赖。例如:```bashmvncleaninstall-U```此命令会让Maven强制检查远程仓库的更新(包括失败缓存的依赖),适用于所有依赖,但特别针对快照版本。2.**清除本地仓库中的失败缓存**:手动删除本地仓库中对应依赖的目录。例如,对于引用[2]中的错误:```cn.iocoder.boot:yudao-dependencies:pom:2.0.1-jdk8-snapshot```我们可以在本地仓库中找到路径:`~/.m2/repository/cn/iocoder/boot/yudao-dependencies/2.0.1-jdk8-snapshot`删除这个目录,然后重新运行Maven命令(不需要加-U也可以重新下载)。3.**调整Maven更新策略**:在项目的pom.xml中配置远程仓库的更新策略,例如设置更新间隔为最短(always):```xml<repositories><repository><id>aliyun</id><url>https://maven.aliyun.com/repository/public</url><releases><enabled>true</enabled><!--设置更新频率,这里设置为每次构建都检查--><updatePolicy>always</updatePolicy></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></repository></repositories>```但注意,这样可能会增加构建时间。4.**修改全局Maven配置**:在Maven的全局配置文件(settings.xml)中修改更新策略:```xml<settings>...<profiles><profile><id>myprofile</id><repositories><repository><id>central</id><url>https://repo.maven.apache.org/maven2</url><releases><updatePolicy>always</updatePolicy></releases><snapshots><updatePolicy>always</updatePolicy></snapshots></repository></repositories></profile></profiles><activeProfiles><activeProfile>myprofile</activeProfile></activeProfiles></settings>```同样,将更新策略设置为`always`,每次构建都检查更新。5.**检查网络和仓库可用性**:确保所配置的远程仓库(如阿里云)当前可用,并且你的网络可以正常访问。6.**检查依赖的版本是否存在**:有时候错误是由于依赖版本在远程仓库中确实不存在导致的。请确认你指定的依赖版本在仓库中存在。对于引用[5]中提到的父POM解析失败,除了上述方法外,还需要检查:-父POM的`groupId`,`artifactId`,`version`是否正确。-是否在项目中正确配置了仓库(可能父POM所在的仓库需要单独配置)。总结步骤:-优先尝试使用`mvn-U`命令强制更新。-如果不行,手动删除本地仓库中对应的依赖目录,然后再运行Maven命令。-长期解决方案:如果该依赖确实需要频繁更新,可以调整仓库的更新策略。注意:强制更新策略(always)会导致每次构建都去检查远程仓库,可能会拖慢构建速度,请根据实际情况选择。§§相关问题§§1.如何配置Maven使用多个镜像仓库?2.如何解决Maven构建中的依赖冲突?3.Maven的依赖调解原则是什么?</think> ### 🔧 解决Maven本地依赖缓存失败问题 当Maven本地仓库缓存了依赖解析失败的结果时,会触发如下报错: **`Failure was cached in the local repository and resolution is not reattempted until the update interval has elapsed or updates are forced`** 以下是逐步解决方案: --- #### ✅ **方案1:强制更新依赖(推荐)** 执行命令强制Maven忽略本地缓存,重新下载依赖: ```bash mvn clean install -U # 或 mvn package --update-snapshots ``` **效果**: - `-U` 或 `--update-snapshots` 参数强制检查远程仓库更新 - 清除本地缓存错误状态,立即重试解析依赖 - **适用于90%的情况** --- #### ✅ **方案2:手动删除本地缓存** 1. 找到本地仓库路径(默认位置): - Windows: `C:\Users\<用户名>\.m2\repository` - Linux/Mac: `~/.m2/repository` 2. **删除报错依赖的目录** 例如报错提到 `cn.iocoder.boot:yudao-dependencies`,则删除: ``` ~/.m2/repository/cn/iocoder/boot/yudao-dependencies ``` 3. 重新运行 `mvn install` --- #### ✅ **方案3:缩短仓库更新间隔** 在 **settings.xml**(全局配置)或 **pom.xml**(项目级)中调整更新策略: ```xml <repository> <id>nexus-public</id> <url>http://your-repo-url</url> <snapshots> <enabled>true</enabled> <!-- 关键:设置更新间隔为最小单位(分钟) --> <updatePolicy>interval:1</updatePolicy> </snapshots> </repository> ``` **参数说明**: - `interval:1`:每1分钟检查更新(默认是每天) - `always`:每次构建都检查更新 --- #### ⚠️ **排查网络与仓库配置** 1. **检查仓库可用性** 访问报错中的仓库URL(如 `http://xxx:8081/nexus/content/groups/public`),确认可连通 2. **验证依赖是否存在** 在仓库Web界面搜索报错的依赖坐标(如 `cn.iocoder.boot:yudao-dependencies:2.0.1-jdk8-snapshot`) 3. **检查代理设置** 若使用代理,在 `settings.xml` 中配置: ```xml <proxy> <id>proxy</id> <active>true</active> <protocol>http</protocol> <host>proxy-host</host> <port>8080</port> </proxy> ``` --- #### 💡 **根本原因分析** 当首次依赖解析失败时,Maven会: 1. 在本地仓库记录失败状态 2. 默认 **24小时内不再重试**(仓库默认 `updatePolicy:daily`) 3. 后续构建直接读取失败缓存,直至: - 间隔期结束 - 强制更新(`-U`) - 手动删除缓存 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值