SonarQube Scanner报错 Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for
2026/7/31 6:02:22 网站建设 项目流程

目录

核心报错拆解

字面含义

四大常见诱因(按概率排序)

1. SonarQube 服务端与本地 Scanner 版本严重不匹配(最高频)

2. SonarQube 服务端接口返回异常数据(返回空 / 残缺 JSON)

3. Jenkins 配置参数错误,覆盖了服务端接口返回数据

4. 缓存 / 权限问题干扰文件列表解析

分步解决方案

步骤 1:统一 Scanner 与 SonarQube 服务端版本(优先修复)

步骤 2:校验 sonar.host.url 连通性

步骤 3:清理损坏缓存

步骤 4:排查代理与认证

步骤 5:临时规避方案(离线扫描)

最简总结


核心报错拆解

java.lang.IllegalStateException: Fail to download libraries from server Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 at org.sonar.runner.Bootstrapper.getBootstrapFiles(Bootstrapper.java:224)

字面含义

Bootstrapper 从 SonarQube 服务端拉取启动依赖文件列表时,拿到的数组长度只有1,代码却尝试读取下标1(数组下标从 0 开始,长度 1 仅能访问下标 0),数组越界。

四大常见诱因(按概率排序)

1. SonarQube 服务端与本地 Scanner 版本严重不匹配(最高频)

  • 旧版 Sonar Runner(老 sonar-runner 独立工具)连接新版 SonarQube 服务端(9.x/10.x)新版 SonarQube 接口返回的启动文件格式重构,老解析代码不兼容,返回数组长度变短,直接下标越界。
  • 反向:新版 Scanner 连接极其老旧 SonarQube 5.x/6.x 服务端,接口返回数据格式不兼容。

2. SonarQube 服务端接口返回异常数据(返回空 / 残缺 JSON)

触发场景:

  1. Jenkins 机器无法完整访问 SonarQube/batch/index引导接口(网络拦截、反向代理 Nginx/Apache 截断响应、防火墙丢包)
  2. SonarQube 服务宕机 / 内存溢出,接口返回半截 JSON、空数组
  3. HTTPS 证书、代理配置错误,接口返回 401/403/500 错误页面而非标准 JSON Bootstrapper 解析残缺响应生成数组长度 = 1,代码硬编码读取下标 1 直接报错。

3. Jenkins 配置参数错误,覆盖了服务端接口返回数据

错误配置示例:

  • sonar.host.url填错(填成前端页面地址、带多余路径、IP 端口错误)
  • 配置了无效sonar.bootstrap.url自定义引导地址,返回非法数据
  • 代理参数sonar.http.proxy配置错乱,网络转发篡改接口返回内容

4. 缓存 / 权限问题干扰文件列表解析

日志可见缓存目录:/var/jenkins_home/.sonar/cache

  1. 旧缓存文件损坏,Scanner 读取本地缓存文件列表格式错乱
  2. Jenkins 用户无权限读写缓存目录,读取缓存时获取残缺数据

分步解决方案

步骤 1:统一 Scanner 与 SonarQube 服务端版本(优先修复)

  1. 查看 SonarQube 服务端版本(页面底部)
  2. 替换对应兼容扫描器:
    • SonarQube 7.9+:使用sonar-scanner(推荐),废弃老旧sonar-runner
    • SonarQube 10.x:必须使用 5.0+ 版本 sonar-scanner
  3. Jenkins 全局工具配置中更新 Sonar Scanner 版本。

步骤 2:校验 sonar.host.url 连通性

在 Jenkins 机器手动执行 curl 测试引导接口:

# 替换为你的Sonar地址 curl http://sonar-server:9000/batch/index
  • 正常:返回一段 JSON 数组(包含启动 jar 包信息)
  • 异常:返回 HTML 报错、空内容、401/500 → 修复网络 / 代理 / 权限 / Nginx 反向代理配置。

步骤 3:清理损坏缓存

Jenkins Pipeline 构建前增加清理命令:

rm -rf /var/jenkins_home/.sonar/cache rm -rf ./target/.sonar

或修改 Jenkins 启动用户,赋予.sonar目录完整读写权限。

步骤 4:排查代理与认证

  1. 若 SonarQube 需账号密码登录,确认配置:

    plaintext

    sonar.login=管理员token sonar.password=
  2. 若内网需要代理,正确配置代理参数,不要错误代理内网 Sonar 地址:

    plaintext

    sonar.http.proxyHost=xxx sonar.http.proxyPort=xxx sonar.http.nonProxyHosts=sonar-server

步骤 5:临时规避方案(离线扫描)

网络 / 接口长期不通时,使用离线模式,提前把 Sonar 依赖包下载到 Jenkins 机器本地,跳过从服务端下载引导库逻辑。

最简总结

报错本质:Scanner 解析 SonarQube 服务端返回的启动文件列表时数据格式异常,90% 情况是扫描器与服务端版本不兼容,其次是网络 / 代理导致接口返回残缺数据。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询