Claude-skill-registry java-coverage
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/java-coverage" ~/.claude/skills/majiayu000-claude-skill-registry-java-coverage && rm -rf "$T"
manifest:
skills/data/java-coverage/SKILL.mdsource content
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 (L23-L31)
- Quick Start (L57-L94)
- Coverage Thresholds (L95-L119)
- Exclusions (L120-L139)
- Multi-Module Aggregation (L140-L190)
- SonarQube Integration (L191-L201)
- References (L202-L208)
- Related Rules (L209-L212)
- Related Skills (L213-L219)
Available Resources
📚 references/ - Detailed documentation
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" } }
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 |