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

如何配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:06:34