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


相关推荐: JS碰撞运动实现方法详解  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  Laravel如何实现本地化和多语言支持?(i18n教程)  无锡营销型网站制作公司,无锡网选车牌流程?  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  在线制作视频网站免费,都有哪些好的动漫网站?  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  深圳网站制作培训,深圳哪些招聘网站比较好?  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  如何用已有域名快速搭建网站?  制作企业网站建设方案,怎样建设一个公司网站?  Laravel如何实现一对一模型关联?(Eloquent示例)  如何快速完成中国万网建站详细流程?  简单实现jsp分页  详解阿里云nginx服务器多站点的配置  深入理解Android中的xmlns:tools属性  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  实例解析angularjs的filter过滤器  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  如何构建满足综合性能需求的优质建站方案?  微信小程序 input输入框控件详解及实例(多种示例)  如何基于云服务器快速搭建网站及云盘系统?  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  Swift中循环语句中的转移语句 break 和 continue  香港网站服务器数量如何影响SEO优化效果?  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  新三国志曹操传主线渭水交兵攻略  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  如何在Tomcat中配置并部署网站项目?  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  Android利用动画实现背景逐渐变暗  Laravel如何实现模型的全局作用域?(Global Scope示例)  Java垃圾回收器的方法和原理总结  Laravel如何与Pusher实现实时通信?(WebSocket示例)  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  javascript中的try catch异常捕获机制用法分析  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  Laravel如何创建自定义Artisan命令?(代码示例)  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Laravel中的Facade(门面)到底是什么原理  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  iOS验证手机号的正则表达式  如何在建站之星网店版论坛获取技术支持?  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南