如何配置Gradle让Liferay DXP多模块在SonarQube独立扫描
配置Liferay DXP Gradle工作区,让每个模块在SonarQube中作为独立项目
我来帮你搞定这个配置,让test-workspace里的每个Liferay模块都能在SonarQube中以独立项目的形式被扫描。下面是具体的配置步骤:
1. 配置全局gradle.properties
在test-workspace根目录的gradle.properties文件中,添加SonarQube的基础配置,同时确保每个模块能生成唯一的项目标识:
# SonarQube服务器基础配置 sonar.host.url=http://你的SonarQube服务器地址 sonar.login=你的SonarQube访问Token(如果开启了认证) # 每个模块的唯一项目标识配置(关键!) sonar.projectKey=${project.group}:${project.name} sonar.projectName=${project.name} sonar.projectVersion=${project.version}
sonar.projectKey:用模块的group和name组合,保证每个模块的Key唯一,SonarQube会以此区分不同项目sonar.projectName:直接用模块名称作为SonarQube中的项目名,方便识别sonar.projectVersion:用模块的版本号,保持和项目版本一致
2. 配置根目录build.gradle
在test-workspace根目录的build.gradle中,配置SonarQube插件并设置子模块的扫描规则:
// 应用SonarQube插件(请使用与你的Gradle版本兼容的插件版本) plugins { id 'org.sonarqube' version '4.4.1.3373' } // 为所有子模块配置SonarQube扫描 subprojects { apply plugin: 'org.sonarqube' sonarqube { properties { // 适配Liferay模块的源文件路径 property 'sonar.sources', 'src/main/java,src/main/resources' // 测试文件路径 property 'sonar.tests', 'src/test/java' // 编译后的class文件路径 property 'sonar.java.binaries', 'build/classes/java/main' // 排除不需要扫描的文件(比如Liferay自动生成的代码、配置文件) property 'sonar.exclusions', '**/generated/**,**/META-INF/**,**/service-builder/**' } } } // 禁止根项目本身执行Sonar扫描(只扫描子模块) sonarqube.enabled = false
关键说明:
- 我们在
subprojects块中为所有子模块统一应用SonarQube插件,避免重复配置 - 通过
sonar.exclusions排除Liferay模块中不需要扫描的目录,比如Service Builder生成的代码、META-INF配置等 - 禁用根项目的Sonar扫描,确保只有子模块会被提交到SonarQube作为独立项目
3. 执行扫描
配置完成后,你可以:
- 在根目录执行
gradle sonarqube:自动扫描所有子模块,每个模块会以独立项目的形式出现在SonarQube中 - 单独扫描某个模块:执行
gradle :你的模块名称:sonarqube,比如gradle :my-liferay-portlet:sonarqube
注意事项
- 确保SonarQube插件版本与你的Gradle版本兼容(可以在SonarQube官方文档中查看版本对应关系)
- 每个模块的
group和name在各自的build.gradle中要正确设置,避免出现重复的sonar.projectKey - 如果某个模块不需要扫描,可以在该模块的
build.gradle中添加sonarqube.enabled = false来禁用
内容的提问来源于stack exchange,提问作者p.hevia
相关产品推荐
相关产品推荐

