java-coverage
π―Skillfrom bitsoex/bitso-java
Configures and generates JaCoCo code coverage reports for Java/Gradle projects, enabling comprehensive testing analysis and quality metrics.
Installation
npx skills add https://github.com/bitsoex/bitso-java --skill java-coverageSkill Details
>
Overview
# 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
Skill Contents
Sections
- [When to use this skill](#when-to-use-this-skill) (L23-L30)
- [Quick Start](#quick-start) (L56-L93)
- [Coverage Thresholds](#coverage-thresholds) (L94-L118)
- [Exclusions](#exclusions) (L119-L138)
- [Multi-Module Aggregation](#multi-module-aggregation) (L139-L189)
- [SonarQube Integration](#sonarqube-integration) (L190-L200)
- [References](#references) (L201-L207)
- [Related Rules](#related-rules) (L208-L211)
- [Related Skills](#related-skills) (L212-L218)
Available Resources
π references/ - Detailed documentation
- [coverage targets](references/coverage-targets.md)
- [exclusion patterns](references/exclusion-patterns.md)
- [improvement workflow](references/improvement-workflow.md)
- [multi module](references/multi-module.md)
- [prioritization](references/prioritization.md)
---
Quick Start
1. Apply JaCoCo Plugin
```groovy
plugins {
id 'jacoco'
}
jacoco {
toolVersion = "0.8.14"
}
```
2. Configure Report Task
```groovy
jacocoTestReport {
dependsOn test
reports {
xml.required = true // For SonarQube
html.required = true // For local viewing
}
}
test {
finalizedBy jacocoTestReport
}
```
3. Run Coverage
```bash
./gradlew test jacocoTestReport
# Report at: build/reports/jacoco/test/html/index.html
```
Coverage Thresholds
```groovy
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:
```groovy
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+):
```groovy
// 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:
```groovy
// 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
```groovy
sonar {
properties {
property 'sonar.coverage.jacoco.xmlReportPaths',
"${projectDir}/build/reports/jacoco/test/jacocoTestReport.xml"
}
}
```
References
| Reference | Description |
|-----------|-------------|
| [references/exclusion-patterns.md](references/exclusion-patterns.md) | Common exclusion patterns |
| [references/multi-module.md](references/multi-module.md) | Multi-module aggregation |
Related Rules
.cursor/rules/java-jacoco-coverage.mdc- Full JaCoCo reference
Related Skills
| Skill | Purpose |
|-------|---------|
| [java-testing](../java-testing/SKILL.md) | Test configuration |
| [sonarqube-integration](../sonarqube-integration/SKILL.md) | SonarQube setup |
| [gradle-standards](../gradle-standards/SKILL.md) | Gradle configuration |
More from this repository10
Configures and manages MCP (Model Context Protocol) server settings across multiple IDEs for seamless integration and development workflow.
Standardizes REST API development in Java Spring by providing authentication, OpenAPI documentation, and RFC-37 service guidelines.
Streamlines PostgreSQL database integration in Java projects by configuring jOOQ code generation, Flyway migrations, and version compatibility.
doc-sync skill from bitsoex/bitso-java
Manages and standardizes Git hooks across repositories, ensuring consistent code quality checks and team-wide hook compliance automatically.
Integrates SonarQube with MCP to enable natural language querying of Java code quality issues, analysis, and quality gate checks.
Centralizes and standardizes Gradle build configurations for Java projects, managing dependencies, version catalogs, and multi-module setups efficiently.
Automates resolution of Dependabot security vulnerabilities in Java/Gradle projects using severity-based processing and dependency verification.
Implements RFC-34 structured logging standards for Java services, enabling JSON-formatted logs with required fields and contextual metadata.
Upgrades Gradle projects from version 8.x to 9.x, ensuring plugin compatibility and supporting Java 25 migration.