Gradle7.1.1自定义插件使用0.1.+动态版本无法解析最新版本问题排查
旧版本来源分析
- 本地Maven仓库残留:你只清理了
~/.gradle缓存,未删除默认路径为~/.m2/repository的本地Maven仓库,你的配置中mavenLocal()在仓库列表优先级最高,Gradle会优先读取本地Maven中存储的旧版本插件。 - Gradle动态版本缓存:Gradle默认会将动态版本(比如
0.1.+)的解析结果缓存24小时,即使你删除了缓存目录,若缓存未完全失效或者删除不彻底,还是会沿用之前的解析结果。 - Nexus元数据缓存未刷新:你删除了Nexus上的旧版本,但Nexus的仓库索引、元数据缓存没有同步更新,返回的可用版本列表仍然包含旧版本号,导致Gradle继续解析旧版本。
解决方案
- 清理本地Maven残留的旧插件
执行命令删除本地Maven中存储的对应插件所有版本:
rm -rf ~/.m2/repository/com/mycompany/gradle/custom-plugin-test/
- 修改Gradle动态版本缓存策略
在settings.gradle的pluginManagement块中添加以下配置,强制动态版本每次构建都重新解析,不缓存解析结果:
pluginManagement { resolutionStrategy { // 禁用动态版本缓存 cacheDynamicVersionsFor 0, 'seconds' // 禁用快照/变更模块缓存 cacheChangingModulesFor 0, 'seconds' } // 原有仓库、插件配置保持不变 repositories { // 调整仓库顺序,把私有Nexus放在mavenLocal前面,优先拉远端最新版本 maven { url = "${nexus_repo_base}/${nexus_pull_repo_m2}" credentials { username = nexus_username password = nexus_password } } mavenLocal() gradlePluginPortal() } plugins { id 'custom-plugin-test' version "${pluginVersion}" } }
刷新Nexus仓库元数据
登录Nexus后台,找到你存放插件的对应仓库,执行「修复索引」「失效缓存」操作,强制Nexus重新生成最新的版本元数据列表。执行构建时强制刷新依赖
运行Gradle任务时添加--refresh-dependencies参数,强制忽略所有本地缓存的依赖元数据,直接从远端仓库拉取最新版本信息:
gradle <你的任务名> --refresh-dependencies
内容的提问来源于stack exchange,提问作者Sundeep Gupta
相关产品推荐
相关产品推荐

