我想在Travis构建完成后自动将Jacoco测试报告上传到Coveralls。它适用于Java,但如何为Kotlin配置它?
错误消息
我可以在本地和Travis上生成Jacoco测试报告,但是当Travis尝试提交到工作服时,它会失败并显示消息
> Task :coveralls
No source file found on the project: "kotlin-template-project"
With coverage file: /home/travis/build/myname/myreponame/build/reports/jacoco/test/jacocoTestReport.xml
谷歌将我链接到Gradle插件implementation,该插件显示了它抛出此消息的位置,它告诉我(我认为)找到了Jacoco报告文件,但没有找到工作服显然需要的源文件。
我尝试了什么
因此,我尝试以所有这些方式将工作服任务指向我的源文件:
coveralls {
sourceDirs += allprojects.sourceSets.main.allSource.srcDirs.flatten()
sourceDirs += files(sourceSets.main.kotlin.srcDirs).files.absolutePath
project.extensions.coveralls.sourceDirs += project.sourceSets.main.kotlin.srcDirs
sourceDirs += ['src/main/kotlin']
jacocoReportPath = 'build/reports/jacoco/test/jacocoTestReport.xml'
sourceDirs += ['src/test/kotlin']
sourceDirs += ["${projectDir}/src/main/kotlin"]
}
我还尝试将sourceSets project.sourceSets.main
添加到jacocoTestReport
任务中。
项目设置
我的最小build.gradle
档案:
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.2.50'
id 'java' // Required by at least JUnit.
// Test coverage
id 'jacoco'
// Upload jacoco coverage reports to coveralls
id 'com.github.kt3k.coveralls' version '2.8.2'
}
dependencies {
compile 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
// JUnit 5
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.2.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.2.0'
testRuntime 'org.junit.platform:junit-platform-console:1.2.0'
// Kotlintest
testCompile 'io.kotlintest:kotlintest-core:3.1.6'
testCompile 'io.kotlintest:kotlintest-assertions:3.1.6'
testCompile 'io.kotlintest:kotlintest-runner-junit5:3.1.6'
// Spek
testCompile 'org.jetbrains.spek:spek-api:1.1.5'
testRuntime 'org.jetbrains.spek:spek-junit-platform-engine:1.1.5'
}
repositories {
mavenCentral()
mavenLocal()
jcenter()
}
test {
// Enable JUnit 5 (Gradle 4.6+).
useJUnitPlatform()
// Always run tests, even when nothing changed.
dependsOn 'cleanTest'
// Show test results.
testLogging {
events "passed", "skipped", "failed"
}
}
// Test coverage reporting
jacocoTestReport {
// Enable xml for coveralls.
reports {
html.enabled = true
xml.enabled = true
xml.setDestination(file("${buildDir}/reports/jacoco/test/jacocoTestReport.xml"))
}
}
coveralls {
sourceDirs += ['src/main/kotlin']
jacocoReportPath = 'build/reports/jacoco/test/jacocoTestReport.xml'
}
相关问题
sourceDirs
和jacocoReportPath
。sourceDirs += ['src/main/kotlin']
,这听起来很明智,但没有帮助。同样适用于第一个链接sourceDirs = files(sourceSets.main.kotlin.srcDirs).files.absolutePath
。project.extensions.coveralls.sourceDirs += project.sourceSets.main.kotlin.srcDirs
,我试过了。问题Kotlin code coverage in CI pipeline的措辞相当普遍,但评论指向discuss.kotlinlang.org,其中有人展示了改进关于kotlin的Jacoco结果的方法,答案链接到Jacoco Gradle插件我使用和工作:当我运行jacocoTestReport
任务时,会在build/reports/jacoco/test/
中生成报告,包括xml和html。
问题Kotlin Test Coverage也是一般性的,并用一个不必要的复杂构建文件回答,我从中学到了什么新内容。
PS其实我想使用Gradle Kotlin DSL,但由于似乎没有人使用它我向Gradle提出这个问题。但最后我想要为Kotlin DSL解决这个问题。
答案 0 :(得分:2)
Coveralls不支持Kotlin,例如,也请参见问题中提到的这个开放问题(在问题中还提到那里提出的解决方法不起作用):https://github.com/kt3k/coveralls-gradle-plugin/issues/77
解决方案:请尝试使用Codecov.io。
使用Marketplace将其安装到GitHub并添加到您的.travis.yml
after_success:
- bash <(curl -s https://codecov.io/bash)
然后提交并推送,完成!
您可以在https://codecov.io/gh/githubaccountname/reponame上查看结果(构建完成后)
答案 1 :(得分:1)
对于各种不支持Kotlin代码库或仅部分支持Kotlin代码库的QA产品也有类似的经验。尝试将支持性PR提交给几个项目都没有用。
最后,我选择了Coveralls,并为platform
贡献了Kotlin重点插件https://github.com/nbaztec/coveralls-jacoco-gradle-plugin
将插件包含在您的build.gradle.kts
中(与build.gradle
文件类似)
plugins {
jacoco
id("com.github.nbaztec.coveralls-jacoco")
}
然后在“工作服”页面上将环境变量COVERALLS_REPO_TOKEN
设置为令牌。
现在,您可以使用coverallsJacoco
任务来发布覆盖率报告。
有关CI中的更多信息和用法,请参阅 https://github.com/nbaztec/coveralls-jacoco-gradle-plugin
答案 2 :(得分:1)
不是答案,但如果其他人像我一样在 nbaztec 上苦苦挣扎,我想提供一个对我有用的替代方案:https://github.com/kt3k/coveralls-gradle-plugin
除了 README.md 中的内容,我还需要 build.gradle 中的此详细信息:
coveralls {
sourceDirs += ['src/main/kotlin']
jacocoReportPath "${buildDir}/reports/jacoco/report.xml"
}