Gradle 构建因 Maven 仓库连接超时失败的解决方案

发布时间 - 2026-01-26 00:00:00    点击率:

jenkins 在 openshift 环境中执行 gradle 构建时,因无法访问 `repo.maven.apache.org` 导致依赖解析失败,根本原因是构建节点缺乏代理配置;本地成功而 ci 失败,典型体现为网络策略差异。

该错误本质是 Gradle 在无代理配置的受限网络环境中(如企业内网或 OpenShift Jenkins Agent)尝试直连公网 Maven 中央仓库,但因防火墙、NAT 或安全组策略导致 HTTPS 连接超时(Connect timed out),进而无法下载 spring-boot-gradle-plugin 和 dependency-management-plugin 等关键构建插件。

虽然 buildscript.repositories 中已声明 mavenCentral() 和 plugins.gradle.org,但这仅控制运行时依赖的仓库源,而 Gradle 自身在初始化阶段(如解析 classpath 插件)需通过 JVM 级网络层发起 HTTP(S) 请求——此时若未配置系统级代理,请求将直接失败。

✅ 正确解法:通过 gradle.properties 设置 JV

M 系统属性,显式声明 HTTPS 代理

在 Jenkins Pipeline 的工作目录(或 Gradle 用户主目录)下,确保存在 gradle.properties 文件,并添加以下代理配置(值需根据企业实际网络环境替换):

# gradle.properties
systemProp.https.proxyHost=your-proxy.company.com
systemProp.https.proxyPort=8080
systemProp.http.nonProxyHosts="localhost|127.0.0.1|*.company.com|openshift.internal"
systemProp.https.proxyUser=your-username
systemProp.https.proxyPassword=your-password
⚠️ 注意事项:nonProxyHosts 使用 | 分隔,支持通配符 *,务必包含内部服务域名(如 OpenShift API 地址、私有 Nexus 仓库等),避免代理环路;若代理需认证,请同时设置 proxyUser 和 proxyPassword;敏感信息建议通过 Jenkins Credentials Binding 插件注入,而非硬编码;不推荐在 build.gradle 中用 System.setProperty() 动态设置——该方式在 Daemon 模式下可能不生效,且违反 Gradle 配置最佳实践;对于容器化 Jenkins Agent,可将 gradle.properties 作为 ConfigMap 挂载,或在 Pipeline 中通过 sh 命令动态生成。

? 补充建议(提升健壮性):

  • 在 buildscript { repositories { ... } } 中优先配置私有镜像仓库(如 Nexus/Artifactory),并启用 mavenCentral() 作为备用:
    buildscript {
        repositories {
            maven { url "https://nexus.company.com/repository/maven-public/" }
            mavenCentral() // fallback
            maven { url "https://plugins.gradle.org/m2/" }
        }
        // ...
    }
  • 在 Jenkins Pipeline 脚本中验证代理是否生效:
    sh 'curl -I https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-gradle-plugin/2.7.7/spring-boot-gradle-plugin-2.7.7.pom --proxy http://your-proxy:8080'

总结:Gradle 构建超时问题多源于网络可达性缺失,而非配置语法错误。通过 gradle.properties 统一管理 JVM 网络代理,既符合 Gradle 官方推荐方式,又能确保 Daemon 复用、CI 环境一致性与安全性。


# word  # apache  # 编码  # 防火墙  # curl  # proxy  # jenkins  # red  # spring  # maven  # jvm  # openshift  # gradle  # http  # https  # 而非  # 镜像  # 但这  # 又能  # 无法下载  # 可将  # 但因  # 内网  # 根本原因  # 复用 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何自定义错误页面(404, 500)?(代码示例)  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  如何在Windows环境下新建FTP站点并设置权限?  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  如何用PHP快速搭建高效网站?分步指南  如何在云服务器上快速搭建个人网站?  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  如何撰写建站申请书?关键要点有哪些?  js实现获取鼠标当前的位置  教你用AI润色文章,让你的文字表达更专业  Laravel如何配置Horizon来管理队列?(安装和使用)  Laravel用户密码怎么加密_Laravel Hash门面使用教程  Android okhttputils现在进度显示实例代码  Laravel如何实现API资源集合?(Resource Collection教程)  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  网站制作企业,网站的banner和导航栏是指什么?  香港服务器租用费用高吗?如何避免常见误区?  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  EditPlus中的正则表达式 实战(4)  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  魔方云NAT建站如何实现端口转发?  长沙做网站要多少钱,长沙国安网络怎么样?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Laravel如何处理文件下载请求?(Response示例)  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  如何快速搭建自助建站会员专属系统?  浅谈javascript alert和confirm的美化  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  如何在Windows 2008云服务器安全搭建网站?  深圳网站制作培训,深圳哪些招聘网站比较好?  高端建站三要素:定制模板、企业官网与响应式设计优化  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  简单实现jsp分页  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  网站制作大概多少钱一个,做一个平台网站大概多少钱?  Laravel如何使用Service Container和依赖注入?(代码示例)  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  Laravel如何使用Collections进行数据处理?(实用方法示例)