You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Gradle未从Maven Central下载依赖,仅访问私有Nexus仓库

解决Gradle优先访问私有Nexus而非Maven Central的问题

我碰到过很多开发者遇到这种Gradle仓库优先级搞混的问题,结合你描述的场景(本地代理例外可行,其他场景出问题),给你梳理几个关键排查和解决方向:

1. 检查Gradle仓库的声明顺序

Gradle是按声明顺序查找依赖的,如果你的Nexus仓库配置写在了mavenCentral()前面,Gradle就会优先去Nexus查找,找不到就直接报错(不会自动 fallback 到其他仓库)。

修复方式:

确保在项目的build.gradle(或build.gradle.kts)里,把mavenCentral()放在Nexus仓库前面:

Groovy DSL示例:

repositories {
    mavenCentral() // 优先声明Maven Central
    maven {
        url "http://your-nexus-url/repository/maven-public/"
        credentials {
            username = nexusUsername
            password = nexusPassword
        }
    }
}

Kotlin DSL示例:

repositories {
    mavenCentral()
    maven {
        url = uri("http://your-nexus-url/repository/maven-public/")
        credentials {
            username = nexusUsername
            password = nexusPassword
        }
    }
}

另外别忘了检查全局Gradle配置(~/.gradle/init.gradle或~/.gradle/init.gradle.kts),很多公司会在这里统一配置仓库,如果全局配置里把Nexus设为优先,会覆盖项目级的配置。

2. 排查Nexus的代理仓库配置

如果你们的Nexus是作为Maven Central的代理使用,那得确保Nexus的代理功能正常:

  • 登录Nexus后台,进入Repositories,找到你的Maven Central代理仓库(通常叫maven-central):
    • 检查Remote Storage是否为https://repo1.maven.org/maven2/,且Status显示Online;
    • 检查组仓库(比如maven-public)的Member Repositories列表里,是否包含这个代理仓库,且顺序合理(代理仓库靠前的话,Nexus内部会优先从代理拉取)。
      如果Nexus的代理配置失效,Gradle去Nexus找不到依赖就会直接报错,不会再去Maven Central尝试。

3. 统一代理配置的场景差异

你本地通过设置代理例外可以正常访问,但其他场景(CI/CD、同事机器)出问题,核心是代理配置的环境差异:

  • 本地的~/.gradle/gradle.properties里,你可能设置了systemProp.http.nonProxyHosts,把repo1.maven.org和Nexus域名加入了例外,让Gradle直接访问这些地址;
  • 但其他环境可能没有这个配置,或者代理规则不同:比如CI服务器有全局代理,导致Gradle无法直接访问Maven Central,只能走Nexus,而Nexus又没代理到Maven Central,就会报错。

解决建议:

在项目的gradle.properties里统一配置代理规则(如果需要),或者在CI环境的构建脚本中添加非代理主机配置:

systemProp.http.proxyHost=your-proxy-host
systemProp.http.proxyPort=your-proxy-port
systemProp.http.nonProxyHosts=repo1.maven.org|your-nexus-domain.com|localhost|127.0.0.1

4. 精确控制依赖的仓库来源

如果上面的方法都没解决,可以用Gradle的content块精确指定哪些依赖走哪个仓库,避免Gradle乱找:

Groovy DSL示例:

repositories {
    mavenCentral {
        content {
            // 所有公共第三方依赖(比如com.、org.开头的组)优先走Maven Central
            includeGroupByRegex("com\\..*")
            includeGroupByRegex("org\\..*")
        }
    }
    maven {
        url "http://your-nexus-url/repository/maven-public/"
        credentials {
            username = nexusUsername
            password = nexusPassword
        }
        content {
            // 只有公司内部的私有依赖走Nexus
            includeGroup("your.company.group")
        }
    }
}

这种方式能从根源上避免仓库优先级的问题,让不同类型的依赖明确走对应的仓库。

5. 清理Gradle缓存

有时候缓存里的错误记录会导致Gradle重复尝试错误的仓库,执行以下命令清理缓存,然后重新同步项目:

./gradlew cleanBuildCache

或者手动删除本地Gradle缓存目录:~/.gradle/caches,再重新构建。

内容的提问来源于stack exchange,提问作者Brandon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:59:47