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

使用SonarQube扫描应用时遇API兼容性错误求排查

解决SonarQube Maven扫描时的java.lang.reflect.InaccessibleObjectException问题

问题根源

你使用的Sonar Maven插件3.9.1版本偏旧,对Java 11的模块系统适配不足。Java 9+引入的模块机制会限制反射访问核心包,插件尝试访问java.lang包时触发了权限限制,进而抛出InaccessibleObjectException。

可行解决方法

1. 升级Sonar Maven插件版本

直接将插件升级到3.10.0及以上版本,这些版本修复了Java 11的模块兼容性问题:

  • 方式一:在项目pom.xml中指定插件版本
<build>
  <plugins>
    <plugin>
      <groupId>org.sonarsource.scanner.maven</groupId>
      <artifactId>sonar-maven-plugin</artifactId>
      <version>3.10.0.2594</version>
    </plugin>
  </plugins>
</build>
  • 方式二:执行命令时直接指定插件版本
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.10.0.2594:sonar -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_AUTH_TOKEN -Dsonar.projectKey=$SONAR_PROJECT_KEY -Dsonar.projectName=$CI_PROJECT_PATH_SLUG

2. 临时开放Java模块访问权限

如果暂时无法升级插件,给Maven命令添加JVM参数,开放java.lang包的反射访问权限:

export MAVEN_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"
mvn sonar:sonar -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_AUTH_TOKEN -Dsonar.projectKey=$SONAR_PROJECT_KEY -Dsonar.projectName=$CI_PROJECT_PATH_SLUG

或者直接将参数嵌入命令:

mvn sonar:sonar -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_AUTH_TOKEN -Dsonar.projectKey=$SONAR_PROJECT_KEY -Dsonar.projectName=$CI_PROJECT_PATH_SLUG -Dmaven.compiler.fork=true -Dadditionalparam="--add-opens java.base/java.lang=ALL-UNNAMED"

3. 确认环境兼容性

你的SonarQube 8.9.10是LTS版本,和Java 11、升级后的插件完全兼容,不需要改动SonarQube服务端版本。

内容的提问来源于stack exchange,提问作者Lukáš Antol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:31:36