¿Informe de cobertura de Gradle jacoco con más de un submódulo (s)?

Finalmente encontré este complemento: https://github.com/palantir/gradle-jacoco-coverage que hizo el trabajo por mí:

raíz gradle.build

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        // see https://jcenter.bintray.com/com/android/tools/build/gradle/
        classpath 'com.android.tools.build:gradle:2.1.0'
        // classpath 'com.android.tools.build:gradle:2.2.0-alpha1'

        // https://github.com/palantir/gradle-jacoco-coverage
        classpath 'com.palantir:jacoco-coverage:0.4.0'      
    }
}

// https://github.com/palantir/gradle-jacoco-coverage
apply plugin: 'com.palantir.jacoco-full-report'

todos los subproyectos que tiene

apply plugin: 'jacoco'

están incluidos en el informe.

Respuesta 1

Una posible solución (con algunas partes específicas del sonar):

def getJacocoMergeTask(Project proj){
    def jmClosure =  {
        doFirst {
            logger.info "${path} started"
            executionData.each { ed ->
                logger.info "${path} data: ${ed}"
            }
        }
        onlyIf {
            executionData != null && !executionData.isEmpty()
        }
    }

    def jacocoMerge = null
    if(!proj.tasks.findByName('jacocoMerge')){

        jacocoMerge = proj.tasks.create('jacocoMerge', JacocoMerge.class)
        jacocoMerge.configure jmClosure

        // sonar specific part
        proj.rootProject.tasks["sonarqube"].mustRunAfter jacocoMerge

        proj.sonarqube {
            properties {
                property "sonar.jacoco.reportPaths", jacocoMerge.destinationFile.absolutePath
            }
        }
        // end of sonar specific part

        logger.info "${jacocoMerge.path} created"
    } else {
        jacocoMerge = proj.tasks["jacocoMerge"]
    }
    jacocoMerge
}


afterEvaluate { project ->
    def jacocoMerge = getJacocoMergeTask(project)

    project.tasks.withType(Test) { task ->
        logger.info "${jacocoMerge.path} cfg: ${task.path}"

        task.finalizedBy jacocoMerge
        jacocoMerge.dependsOn task

        task.doLast {
            logger.info "${jacocoMerge.path} executionData ${task.path}"
            jacocoMerge.executionData task
        }

        def cfg = configurations.getByName("${task.name}Runtime")
        logger.info "${project.path} process config: ${cfg.name}"

        cfg.getAllDependencies().withType(ProjectDependency.class).each { pd ->
            def depProj = pd.dependencyProject
            logger.info "${task.path} dependsOn ${depProj.path}"
            def jm = getJacocoMergeTask(depProj)

            task.finalizedBy jm
            jm.dependsOn task

            task.doLast {
                logger.info "${jm.path} executionData ${task.path}"
                jm.executionData task
            }
        }
    }
}

Esto fusionará todos los datos de ejecución de todos los proyectos que utilizaron un determinado proyecto durante las pruebas como dependencia.

Respuesta: 2

Deberá crear una nueva tarea de tipo JacocoMerge que agregue los informes JaCoCo de todos los subproyectos. Vea una discusión similar en esta publicación .

Respuesta: 3

Puede crear un informe combinado sin execarchivo combinado . Cree una nueva tarea a la raíz de build.gradlecon el siguiente contenido.

task jacocoReport(type: JacocoReport) {
    for (p in allprojects) {
        def testTask = p.tasks.findByName("test")
        if (testTask != null)
            dependsOn(testTask)

        executionData.setFrom(file("${p.buildDir}/jacoco/test.exec"))
        classDirectories.from(file("${p.buildDir}/classes/java/main"))
    }
}
Respuesta: 4

ok, esta pregunta nunca se ha hecho antes en la web, así que aquí va: estoy aprendiendo Java (nivel principiante-intermedio) y decidí seguir adelante con el programa de clase probando Orientado a Aspectos ...

Runtime.getRuntime (). MaxMemory () muestra qué memoria? ¿Es sobreviviente, Edén, viejo, permanente?

Estoy tratando de extraer la información del hipervínculo de un PDF usando PDFBox, pero no estoy seguro de cómo obtener (Object p: pages) {PDPage page = (PDPage) p; Lista <?> Anotaciones = página ...

Cuando pregunté esto por primera vez, incluí toda la información que pude, ya que nunca sé qué ayudará a alguien si puede dar una solución, pero por las respuestas, parece que no he aclarado mi punto ...