문제:
나는 프로젝트가 있습니다 자 코코 특정 클래스 및 / 또는 패키지를 필터링하고 싶습니다.
관련 문서 :
다음 문서를 읽었습니다.
공무원 자 코코사이트 :
http://www.eclemma.org/jacoco/index.html
공무원 자 코코 문서 Gradle: https://gradle.org/docs/current/userguide/jacoco_plugin.html
공무원 자 코코 Github
문제, 커버리지 작업 :
https://github.com/jacoco/jacoco/wiki/FilteringOptions
https://github.com/jacoco/jacoco/issues/14
관련 StackOverflow 링크 :
JaCoCo 및 Gradle-필터링 옵션 (답변 없음)
Sonarrunner 및 Gradle을 사용하여 Jacoco 보고서에서 패키지 제외 (사용하지 않음)소나)
JaCoCo-보고서에서 JSP 제외 (메이븐, 나는 사용하고 있습니다 Gradle)
Maven Jacoco 구성-작동하지 않는 보고서에서 클래스 / 패키지 제외 합니다.메이븐, 나는 사용하고 있습니다 Gradle)
JaCoCo gradle 플러그인 제외 (이 작업을 수행 할 수 없음)
Gradle Jacoco-커버리지 보고서에는 구성에서 제외 된 클래스가 포함되어 있습니다 (매우 가깝게 보였고 사용 doFirst
했으며 나를 위해 작동하지 않았습니다)
내가 시도한 것의 예 :
apply plugin: 'java'
apply plugin: 'jacoco'
buildscript {
repositories {
mavenCentral()
jcenter()
}
}
repositories {
jcenter()
}
jacocoTestReport {
reports {
xml {
enabled true // coveralls plugin depends on xml format report
}
html {
enabled true
}
}
test {
jacoco {
destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
classDumpFile = file("$buildDir/jacoco/classpathdumps")
excludes = ["projecteuler/**"] // <-- does not work
// excludes = ["projecteuler"]
}
}
}
질문:
생성 할 때 특정 패키지 및 클래스를 제외하려면 어떻게해야합니까? 자 코코 커버리지 보고서?
답변
덕분에 Yannick Welsch
:
Google을 검색하고 Gradle 문서를 읽고 이전 StackOverflow 게시물을 살펴본 후이 답변을 공식에서 찾았습니다. Gradle 포럼!
jacocoTestReport {
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it, exclude: 'com/blah/**')
})
}
}
출처 : https://issues.gradle.org/browse/GRADLE-2955
내 build.gradle
Java / Groovy 프로젝트에 대한 솔루션 :
apply plugin: 'java'
apply plugin: 'jacoco'
jacocoTestReport {
reports {
xml {
enabled true // coveralls plugin depends on xml format report
}
html {
enabled true
}
}
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it,
exclude: ['codeeval/**',
'crackingthecode/part3knowledgebased/**',
'**/Chapter7ObjectOrientedDesign**',
'**/Chapter11Testing**',
'**/Chapter12SystemDesignAndMemoryLimits**',
'projecteuler/**'])
})
}
}
보시다시피 exclude:
몇 개의 패키지를 필터링하기 위해 더 많은 것을 성공적으로 추가 할 수있었습니다 .
출처 : https://github.com/jaredsburrows/CS-Interview-Questions/blob/master/build.gradle
Android와 같은 다른 프로젝트에 대한 사용자 지정 작업 :
apply plugin: 'jacoco'
task jacocoReport(type: JacocoReport) {
reports {
xml {
enabled true // coveralls plugin depends on xml format report
}
html {
enabled true
}
}
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it,
exclude: ['codeeval/**',
'crackingthecode/part3knowledgebased/**',
'**/Chapter7ObjectOrientedDesign**',
'**/Chapter11Testing**',
'**/Chapter12SystemDesignAndMemoryLimits**',
'projecteuler/**'])
})
}
}
답변
Gradle 버전 5.x의 경우 classDirectories = files(...)
는 사용 중단 경고를 표시하고 Gradle 6.0부터 전혀 작동하지 않습니다. 이것은 클래스를 제외하는 더 이상 사용되지 않는 방법입니다.
jacocoTestReport {
afterEvaluate {
classDirectories.setFrom(files(classDirectories.files.collect {
fileTree(dir: it, exclude: 'com/exclude/**')
}))
}
}
답변
나를 위해, 그것은 함께 일하는 것이 좋습니다
test {
jacoco {
excludes += ['codeeval/**',
'crackingthecode/part3knowledgebased/**',
'**/Chapter7ObjectOrientedDesign**',
'**/Chapter11Testing**',
'**/Chapter12SystemDesignAndMemoryLimits**',
'projecteuler/**']
}
}
문서 https://docs.gradle.org/current/userguide/jacoco_plugin.html#N16E62에 명시된대로
있고 처음에 질문하므로 대답은 다음과 같습니다.
그래서 당신이 나에게 묻는다면 : 그것은 질문이 아닙니다
excludes = ["projecteuler/**"]
또는
excludes += ["projecteuler/**"]
그러나
excludes = ["**/projecteuler/**"]
패키지를 제외하려면 *.projecteuler.*
및 test {}
프로젝트 수준에서 중첩되지jacocoTestReport
답변
Gradle6의 경우 다음과 같이 사용하십시오.을 만들었 classDirectories as final
으므로 다시 할당 할 수 없지만 classDirectories.setFrom
활용할 수 있는 setter 메서드가 있습니다.
jacocoTestReport {
reports {
xml.enabled true
html.enabled true
html.destination file("$buildDir/reports/jacoco")
}
afterEvaluate {
classDirectories.setFrom(files(classDirectories.files.collect {
fileTree(dir: it,
exclude: ['**/server/**',
'**/model/**',
'**/command/**'
]
)
}))
}
}
답변
다음 은 ANT에서이 문제에 대한 해결책입니다. jacocoTestReport
작업 아래에 다음을 추가하여 gradle에 적용 할 수 있습니다 . 이것이 실제로 jacoco에 의해 문서화되지는 않았지만 지금은 테스트 결과를 필터링하는 유일한 방법 인 것 같습니다.
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it, exclude: 'excluded/files/**')
})
}
답변
이것은 잠시 동안 나왔지만 방금 이것을 우연히 만났습니다. 나는 필요한 모든 배제로 고군분투하고 있었다. 나는 그것이 나에게 훨씬 더 단순한 것임을 알았다. Maven 프로젝트 레이아웃 스타일 / src / main / java 및 / src / test / java를 따르는 경우 다음과 같이 classDirectories 구성 에 buildDir / classes / main 을 추가하기 만하면됩니다 .
afterEvaluate {
jacocoTestReport {
def coverageSourceDirs = ['src/main/java']
reports {
xml.enabled false
csv.enabled false
html.destination "${buildDir}/reports/jacocoHtml"
}
sourceDirectories = files(coverageSourceDirs)
classDirectories = fileTree(
dir: "${project.buildDir}/classes/main",
excludes: [
//whatever here like JavaConfig etc. in /src/main/java
]
)
}
}
답변
아래 코드는 커버리지 확인에서도 클래스를 제외합니다.
jacocoTestCoverageVerification {
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: "${project.buildDir}/classes/main",
exclude: ['**/packagename/**'])
})
}
}