java-coverage

JaCoCo code coverage configuration for Java/Gradle projects.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "java-coverage" with this command: npx skills add bitsoex/bitso-java/bitsoex-bitso-java-java-coverage

Java Coverage

JaCoCo code coverage configuration for Java/Gradle projects.

When to use this skill

  • Setting up code coverage reporting

  • Configuring coverage thresholds

  • Aggregating coverage across modules

  • Integrating with SonarQube

  • Troubleshooting coverage reports

  • When asked to "improve test coverage"

Skill Contents

Sections

  • When to use this skill

  • Quick Start

  • Coverage Thresholds

  • Exclusions

  • Multi-Module Aggregation

  • SonarQube Integration

  • Checking Coverage via SonarQube MCP

  • References

  • Related Rules

  • Related Skills

Available Resources

references/ - Detailed documentation

  • coverage targets

  • coverage via mcp

  • exclusion patterns

  • improvement workflow

  • multi module

  • prioritization

Quick Start

  1. Apply JaCoCo Plugin

plugins { id 'jacoco' }

jacoco { toolVersion = "0.8.14" }

  1. Configure Report Task

jacocoTestReport { dependsOn test

reports {
    xml.required = true  // For SonarQube
    html.required = true // For local viewing
}

}

test { finalizedBy jacocoTestReport }

  1. Run Coverage

./gradlew test jacocoTestReport

Report at: build/reports/jacoco/test/html/index.html

Coverage Thresholds

jacocoTestCoverageVerification { violationRules { rule { limit { minimum = 0.80 // 80% minimum coverage } }

    rule {
        element = 'CLASS'
        excludes = ['*.generated.*', '*.config.*']
        limit {
            counter = 'LINE'
            minimum = 0.70
        }
    }
}

}

check.dependsOn jacocoTestCoverageVerification

Exclusions

Common patterns to exclude from coverage:

jacocoTestReport { afterEvaluate { classDirectories.setFrom(files(classDirectories.files.collect { fileTree(dir: it, exclude: [ '/generated/', '/config/', '/*Config.class', '/*Properties.class', '**/Application.class' ]) })) } }

Multi-Module Aggregation

For aggregated reports across modules, use the modern jacoco-report-aggregation plugin (Gradle 7.4+):

// In root build.gradle plugins { id 'base' id 'jacoco-report-aggregation' }

// Ensure subprojects are evaluated first subprojects.each { evaluationDependsOn(it.path) }

dependencies { subprojects.each { jacocoAggregation it } }

reporting { reports { testCodeCoverageReport(JacocoCoverageReport) { testType = TestSuiteType.UNIT_TEST } } }

For older Gradle versions, use a manual task with defensive filtering:

// In root build.gradle (Gradle < 7.4) task jacocoRootReport(type: JacocoReport) { dependsOn subprojects*.test

// Use defensive filtering to avoid missing-directory errors
def srcDirs = files(subprojects*.sourceSets*.main*.allSource*.srcDirs).filter { it.exists() }
def classDirs = files(subprojects*.sourceSets*.main*.output).filter { it.exists() }
def execData = files(subprojects*.jacocoTestReport*.executionData).filter { it.exists() }

additionalSourceDirs.from(srcDirs)
sourceDirectories.from(srcDirs)
classDirectories.from(classDirs)
executionData.from(execData)

reports {
    xml.required = true
    html.required = true
}

}

SonarQube Integration

sonar { properties { property 'sonar.coverage.jacoco.xmlReportPaths', "${projectDir}/build/reports/jacoco/test/jacocoTestReport.xml" } }

Checking Coverage via SonarQube MCP

Instead of running local JaCoCo builds to check current coverage state, use SonarQube MCP tools for faster feedback:

Tool Purpose

search_files_by_coverage

Find files with lowest coverage

get_file_coverage_details

Line-by-line coverage for a specific file

get_component_measures

Project/module-level coverage metric

get_project_quality_gate_status

Check if coverage gate passes

Find low-coverage files

search_files_by_coverage: projectKey: "my-service"

Check specific file coverage

get_file_coverage_details: key: "my-service:src/main/java/com/bitso/Service.java"

Check overall coverage

get_component_measures: component: "my-service", metricKeys: ["coverage"]

MCP reflects the last CI analysis. Use JaCoCo locally to generate new coverage after writing tests.

See fix-sonarqube coverage reference for the full MCP coverage workflow.

References

Reference Description

references/exclusion-patterns.md Common exclusion patterns

references/multi-module.md Multi-module aggregation

Related Rules

  • java-jacoco-coverage - Full JaCoCo reference

Related Skills

Skill Purpose

java-testing Test configuration

fix-sonarqube SonarQube setup

gradle-standards Gradle configuration

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

coderabbit-interactions

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

coderabbit-workflow

No summary provided by upstream source.

Repository SourceNeeds Review
General

gradle-standards

No summary provided by upstream source.

Repository SourceNeeds Review