在gradle?與jacoco集成以后build時會報以上錯誤,原因是SourceSetOutput.getClassesDir()?是?Gradle 4中的方法,在Gradle 5中被標記過時,替代方法是 getClassesDirs() ,此時返回值是FileCollection。要想獲得File,需調(diào)用getSingleFile()。
解決方式如下:
將? output.classesDir?替換成??output.classesDirs.singleFile
修改后的集成腳本如下:
//Additional SourceSets can be added to the jacocoOfflineSourceSets as needed by
project.ext.jacocoOfflineSourceSets = [?'main'?]
task doJacocoOfflineInstrumentation(dependsOn: [ classes, project.configurations.jacocoAnt ]) {
????inputs.files classes.outputs.files
????File outputDir =?new?File(project.buildDir,?'instrumentedClasses')
????outputs.dir outputDir
????doFirst {
????????project.delete(outputDir)
????????ant.taskdef(
????????????????resource:?'org/jacoco/ant/antlib.xml',
????????????????classpath: project.configurations.jacocoAnt.asPath,
????????????????uri:?'jacoco'
????????)
????????def instrumented =?false
????????jacocoOfflineSourceSets.each { sourceSetName ->
????????????if?(file(sourceSets[sourceSetName].output.classesDirs.singleFile).exists()) {
????????????????def instrumentedClassedDir =?"${outputDir}/${sourceSetName}"
????????????????ant.'jacoco:instrument'(destdir: instrumentedClassedDir) {
????????????????????fileset(dir: sourceSets[sourceSetName].output.classesDirs.singleFile, includes:?'**/*.class')
????????????????}
????????????????//Replace the classes dir in the test classpath with the instrumented one
????????????????sourceSets.test.runtimeClasspath -= files(sourceSets[sourceSetName].output.classesDirs.singleFile)
????????????????sourceSets.test.runtimeClasspath += files(instrumentedClassedDir)
????????????????instrumented =?true
????????????}
????????}
????????if?(instrumented) {
????????????//Disable class verification based on?https://github.com/jayway/powermock/issues/375
????????????test.jvmArgs +=?'-noverify'
????????}
????}
}
test.dependsOn doJacocoOfflineInstrumentation
jacocoTestReport {
????reports {
????????xml.enabled?true
????????csv.enabled?true
????????html.enabled?true
????}
}
check.dependsOn jacocoTestReport