Agent skill
java-coverage
JaCoCo code coverage configuration for Java/Gradle projects. Covers report generation, coverage thresholds, multi-module aggregation, and SonarQube integration. Use when setting up or troubleshooting code coverage.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/java-coverage-bitsoex-bitso-java-2
Metadata
Additional technical details for this skill
- tags
-
java jacoco coverage testing
- version
- 2.0.0
- category
- quality
- technology
- java
SKILL.md
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"
}
2. Configure Report Task
jacocoTestReport {
dependsOn test
reports {
xml.required = true // For SonarQube
html.required = true // For local viewing
}
}
test {
finalizedBy jacocoTestReport
}
3. 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 |
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?