Gradle多模块项目Sonar仅扫描rootmodule问题求助
下面是几种常见的原因及对应的排查方向:
SonarQube插件仅在RootModule中应用,未覆盖子模块
你只在rootmodule的build.gradle里声明了id 'org.sonarqube' version '4.4.1.3373',但subprojects块仅用于设置属性,并不会自动让子模块应用该插件。子模块必须显式应用SonarQube插件才能被纳入扫描范围,你需要把插件应用代码移到allprojects或subprojects块中,或者在每个子模块的build.gradle里单独声明插件。Settings.gradle未正确包含所有子模块
检查根目录的settings.gradle,确认是否添加了所有子模块的包含声明,示例如下:include ':rootmodule', ':module1', ':module2', ':module3'如果某个模块未被
include,Gradle会忽略它,自然不会被Sonar扫描。子模块缺少基础语言插件
SonarQube插件依赖Java/Android等基础插件来识别源代码目录,如果子模块是纯配置模块(无源代码),或者未应用java这类基础插件,Sonar会跳过该模块的扫描。确保需要扫描的子模块都应用了对应的语言插件。执行了错误的扫描任务
如果你执行的是./gradlew :rootmodule:sonar,只会触发rootmodule的扫描任务。要扫描所有模块,需要执行根项目的Sonar任务:./gradlew sonar。Subprojects块的属性配置存在冲突
检查subprojects中的Sonar属性是否存在错误,比如sonar.projectKey重复,或者配置了sonar.skip=true这类排除属性,导致子模块被跳过扫描。确保每个子模块的Sonar配置唯一且正确。
内容的提问来源于stack exchange,提问作者mtnp

