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

Gradle无法从Nexus拉取依赖,Jenkins构建报308重定向错误求助

解决Jenkins拉取Nexus依赖时的308重定向+HR标签解析错误问题

兄弟,这个问题我之前帮团队排查过好几次,核心原因其实很明确:Maven没正确处理Nexus返回的308永久重定向,反而把重定向的HTML页面当成POM文件解析,而那个页面里的<hr>标签是HTML5的写法(未闭合),但Maven用严格的XML解析器处理,直接就报错了。

下面是一步步的解决方案,按顺序试应该能搞定:

  • 先检查仓库URL的末尾斜杠
    这是最常见的坑!很多人配置Nexus仓库URL的时候会漏掉末尾的/,比如写成http://<service>/repository/maven-public而不是http://<service>/repository/maven-public/。Nexus收到不带斜杠的请求时,会返回308重定向到带斜杠的地址,但Maven的默认配置不会自动跟随这个重定向,直接把重定向的HTML页面存进缓存了。
    去这几个地方修改:

    • Jenkins任务的Maven配置里的仓库地址
    • 项目pom.xml里的<repository>/<pluginRepository>标签
      改完之后先清缓存再构建。
  • 强制Maven跟随重定向
    如果改URL没用,给Maven加启动参数强制它处理重定向。在Jenkins的构建命令里加上:

    -Dmaven.wagon.http.followRedirects=true -Dmaven.wagon.http.retryHandler.count=3
    

    完整命令示例:mvn clean deploy -Dmaven.wagon.http.followRedirects=true -Dmaven.wagon.http.retryHandler.count=3
    第一个参数让Maven的wagon组件自动跟随HTTP重定向,第二个参数增加重试次数,防止偶发的网络问题。

  • 清理无效缓存
    你已经发现缓存里存了那个错误的HTML页面,必须先清掉:

    • 在Jenkins代理机器上,找到Maven本地仓库(一般是/home/jenkins/.m2/repository),删除对应依赖的目录:rm -rf /home/jenkins/.m2/repository/mt/com/bbb/xx/xx-commons/0.0.9
    • 或者在Jenkins构建前加一个步骤,执行mvn clean install -U,-U参数会强制更新依赖,同时清理本地缓存里的无效文件。
  • 验证重定向是否正常
    改完之后先在代理机器上用wget测试,加上-L参数让它跟随重定向:

    wget -L http://<url>/repository/maven-public/mt/com/xx/yy/0.0.9/yy-0.0.9.pom
    

    如果能下载到正常的POM文件(不是那个308的HTML页面),那Jenkins构建应该就没问题了。

如果以上都不行,那可能是Nexus或者前端反向代理(比如Nginx)的配置有问题,比如Nginx强制加了重定向但没考虑Maven的兼容性,这时候就得调整代理的规则,或者给Nexus配置正确的base URL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:37:39