Gradle集成Jacoco报错:无法为JacocoPluginExtension设置reportsDirectory属性
问题修复方案
1. 移除无效的reportsDirectory配置
错误核心原因:JacocoPluginExtension(即jacoco {}全局配置块)并不包含reportsDirectory属性,该配置被放错了位置。
若需自定义Jacoco报告的输出根目录,需将配置移至jacocoTestReport任务中,调整后代码如下:
jacoco { toolVersion = "0.8.8" // 移除此行无效配置 } jacocoTestReport { dependsOn test // 将报告目录配置移至此处 reportsDirectory = layout.buildDirectory.dir('customJacocoReportDir') reports { xml.required = false csv.required = false html.outputLocation = layout.buildDirectory.dir('jacocoHtml') } }
2. 清理无效依赖
你引入的maven-surefire-plugin属于Maven生态的测试执行插件,Gradle拥有独立的test任务体系,无需该依赖,直接删除:
// 移除此行无效依赖 // implementation group: 'org.apache.maven.plugins', name: 'maven-surefire-plugin', version: '2.22.2'
3. 修正SourceSets配置
当前sourceSets存在结构错误:test应与main同级,而非嵌套在main内部,且测试代码目录需符合Gradle常规约定,调整后:
sourceSets { main { java.srcDir 'src/main/java' resources.srcDir 'src/main/resources' output.resourcesDir 'build/classes/main' } test { java.srcDir 'src/test/java' // 若测试资源存放在src/test/resources,可添加此行 // resources.srcDir 'src/test/resources' } }
4. 修正Checkstyle测试代码扫描路径
当前checkstyleTest的source指向错误目录,需改为标准测试代码路径:
checkstyleTest { source = 'src/test/java' }
完整修复后的核心配置片段
// 依赖配置 dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' testImplementation group: 'org.mockito', name: 'mockito-core', version: '5.0.0' testImplementation group: 'org.mockito', name: 'mockito-junit-jupiter', version: '5.0.0' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '2.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' } // 插件配置 plugins { id 'java' id 'jacoco' id 'checkstyle' } // 测试任务 test { useJUnitPlatform() finalizedBy jacocoTestReport } // Jacoco配置 jacoco { toolVersion = "0.8.8" } jacocoTestReport { dependsOn test reportsDirectory = layout.buildDirectory.dir('customJacocoReportDir') reports { xml.required = false csv.required = false html.outputLocation = layout.buildDirectory.dir('jacocoHtml') } } // Checkstyle配置 checkstyle { toolVersion '10.6.0' configFile = file("${rootDir}/checkstyle/google_checks.xml") ignoreFailures = false showViolations = false maxErrors = 15 //configProperties.checkstyleSuppressionsPath = file("$rootDir/checkstyle/checkstyle_suppressions.xml").absolutePath } checkstyleMain { source = 'src/main/java' } checkstyleTest { source = 'src/test/java' } // SourceSets配置 sourceSets { main { java.srcDir 'src/main/java' resources.srcDir 'src/main/resources' output.resourcesDir 'build/classes/main' } test { java.srcDir 'src/test/java' } }
内容的提问来源于stack exchange,提问作者Tanu
相关产品推荐
相关产品推荐

