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

Sonar Gradle插件访问受保护方法失败问题求助

问题原因分析

这个错误的核心是Java 9+模块系统(JPMS)的权限管控冲突:

  • 本地运行正常,大概率是因为你的本地Java环境未启用模块模式,或者依赖版本的兼容性刚好适配;
  • GitHub Enterprise Runner的Java环境默认启用了模块模式,而SonarQube Gradle插件引入的commons-compress与commons-io版本组合,未被授予跨模块访问受保护方法的权限,导致GzipCompressorInputStream无法调用AbstractStreamBuilder.getInputStream()。
解决方案

1. 显式授予模块访问权限

在build.gradle中为Sonar任务添加JVM参数,允许commons-compress模块访问commons-io的受保护成员:

tasks.withType(org.sonarqube.gradle.SonarQubeTask) {
    jvmArgs += [
        "--add-opens=org.apache.commons.io/org.apache.commons.io.build=org.apache.commons.compress",
        "--add-opens=org.apache.commons.io/org.apache.commons.io.build.AbstractStreamBuilder=org.apache.commons.compress"
    ]
}

2. 强制统一依赖版本并排除冲突依赖

SonarQube插件可能自带了与你指定版本冲突的commons-compress/commons-io,需要强制统一版本并排除插件内置的依赖:

configurations.all {
    resolutionStrategy {
        // 选择兼容的版本组合,示例为经过验证的稳定搭配
        force 'org.apache.commons:commons-io:2.15.1'
        force 'org.apache.commons:commons-compress:1.26.1'
        // 排除Sonar插件自带的冲突依赖
        exclude group: 'org.apache.commons', module: 'commons-io'
        exclude group: 'org.apache.commons', module: 'commons-compress'
    }
}

3. 对齐GitHub Runner与本地的Java版本

如果本地使用Java 8而Runner用Java 11+,会触发JPMS权限问题。在GitHub Actions workflow中指定与本地一致的Java版本:

steps:
  - name: Set up JDK
    uses: actions/setup-java@v4
    with:
      java-version: '17' # 替换为你本地使用的Java版本
      distribution: 'temurin'

4. 降级SonarQube Gradle插件版本

若上述方法无效,尝试使用更稳定的旧版本插件,避免依赖兼容性问题:

plugins {
    id 'org.sonarqube' version '4.4.1.3373'
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 10:22:33