Skip to content

Instantly share code, notes, and snippets.

@luisfelipeas5
Last active February 6, 2024 12:27
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save luisfelipeas5/302b13940cd805fb7451fc3558dc8e4c to your computer and use it in GitHub Desktop.
Save luisfelipeas5/302b13940cd805fb7451fc3558dc8e4c to your computer and use it in GitHub Desktop.
Um guia para configurar o básico do SonarQube + Jacoco

Adicione o plugin do SonarQube

Primeiro, adicione ao build.gradle de nível de projeto:

buildscript {
   repositories {
       //...
       maven {
           url "https://plugins.gradle.org/m2/"
       }
   }
}
buildscript {
    dependencies {
        //...
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.4.RELEASE")
        classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6.1"
    }
}
allprojects {
    repositories {
        //...
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
}

Depois adicione no build.gradle do seu módulo principal/base (normalmente chamado de :app), as seguintes linhas abaixo do apply dos outros plugins:

apply plugin: "org.sonarqube"
apply from: './sonarqube.gradle'

Em seguida crie um arquivo chamado ./sonarqube.gradle e adicione essas linhas a ela:

sonarqube {
    properties {
        property "sonar.projectName", "made-sonar-qube-test-android" //nome que será exibido no dashboard do SonarQube
        property "sonar.projectKey", "made-sonar-qube-test-android" //chave/id único do projeto no dashboard do SonarQube
        property "sonar.host.url", "http://127.0.0.1:9000/" //endereço do seu server do SonarQube
        property "sonar.language", "java" //não percebi nenhuma diferença ao trocar para kotlin
        property "sonar.login", "username" //nome de usuário para logar com funções de adm para poder subir os projetos e atualizações
        property "sonar.password", "senha" //senha desse usuario

        property "sonar.sources", "src/main/" //quais são os arquivos .java e .kt daonde o SonarQube vai tirar as métricas
        //property "sonar.sources", "app/src/main/, splash/src/main" //caso vc tenha mais de um caminho (de outros módulos) para analisar
        property "sonar.java.binaries", "build/tmp/kotlin-classes" //no caso do kotlin, é o caminho da onde o binários das classes javes são extraídos. Não sei pra q server ainda
        property "sonar.tests", "src/test" //O caminho para os testes unitários. Mas não sei pra q server ainda já que os relatórios de cobertura são extraídos do jacoco

        //Configuração da parte do Jacoco. Não precisa ter essas linhas caso o teste de coverage não for necessário
        property "sonar.jacoco.reportPaths", "build/jacoco/testDebugUnitTest.exec, app/build/outputs/code_coverage/debugAndroidTest/connected/*.ec"
        property "sonar.coverage.jacoco.xmlReportPaths", "build/reports/jacocoCombined/debug/jacoco.xml"
        property "sonar.java.coveragePlugin", "jacoco"
        property "sonar.junit.reportsPath", "build/jacoco/testDebugUnitTest.exec"
        property "sonar.android.lint.report", "build/reports/lint-results.xml"
    }
}

Com essa configuração você pode subir o projeto no SonarQube rodando:

./gradlew sonarqube

Adicionar o Jacoc para poder funcionar com o SonarQube

Primeiro, adicione ao build.gradle de nível de projeto:

buildscript {
    dependencies {
        //...
        classpath "com.vanniktech:gradle-android-junit-jacoco-plugin:0.15.0"
    }
}

Depois adicione no build.gradle do seu módulo principal/base (normalmente chamado de :app), as seguintes linhas abaixo do apply dos outros plugins:

apply plugin: "com.vanniktech.android.junit.jacoco"
apply from: './jacoco.gradle'

Em seguida crie um arquivo chamado ./jacoco.gradle e adicione essas linhas a ela:

junitJacoco {
    jacocoVersion = '0.8.2' // type String
    ignoreProjects = [] // type String array
    
    excludes = [
        '**/R*.class',
        '**/BuildConfig**'
    ] // type String List
    
    includeNoLocationClasses = false // type boolean
    includeInstrumentationCoverageInMergedReport = false // type boolean
}

Com essa configuração você pode subir o projeto no SonarQube e com os testes de cobertura rodando:

./gradlew clean connectedAndroidTest test createDebugCoverageReport combinedTestReportDebug sonarqube

Dependendo dos productFlavors que vc tiver, esses comandos tem que ser alterados.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment