7

我想在我的 Travis 构建完成后自动将我的 Jacoco 测试报告上传到工作服。它适用于 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 插件实现,它显示了它在哪里抛出此消息,它告诉我(我认为)找到了 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.mainjacocoTestReport任务中。

项目设置

我的最小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'
}

相关问题

PS 实际上我想使用 Gradle Kotlin DSL,但由于似乎没有人使用它,所以我在为 Gradle 提出这个问题。但最后,我希望 Kotlin DSL 也能解决这个问题。

4

3 回答 3

4

[edit August 2020] @nbaztec 写了一个插件来支持 Kotlin,请看他的回答


老答案:

工作服不支持 Kotlin,例如,参见问题中提到的这个开放问题(在问题中还提到那里提出的解决方法不起作用):https ://github.com/kt3k/coveralls -gradle-plugin/问题/77

解决方案:改用Codecov.io使用Marketplace将其安装到 GitHub并添加到您的.travis.yml

after_success:
  - bash <(curl -s https://codecov.io/bash)

然后提交并推送,完成!

您可以在https://codecov.io/gh/githubaccountname/reponame查看结果(构建完成后)

于 2018-06-19T19:35:07.997 回答
1

不是答案,但如果其他人像我一样在 nbaztec 上苦苦挣扎,我想提供一个对我有用的替代方案:https ://github.com/kt3k/coveralls-gradle-plugin

除了 README.md 中的内容之外,我还需要 build.gradle 中的这些详细信息:

coveralls {
    sourceDirs += ['src/main/kotlin']
    jacocoReportPath "${buildDir}/reports/jacoco/report.xml"
}
于 2021-07-30T17:50:41.180 回答
1

对不支持或仅部分支持 Kotlin 代码库的各种 QA 产品有类似的经验。尝试向几个项目提交支持 PR 无济于事。

最后选择了 Coveralls 并为该平台贡献了一个专注于 Kotlin 的插件

https://github.com/nbaztec/coveralls-jacoco-gradle-plugin

用法

将插件包含在您的build.gradle.ktsbuild.gradle文件类似)中:

plugins {
    jacoco
    id("com.github.nbaztec.coveralls-jacoco")
}

然后将环境变量设置为COVERALLS_REPO_TOKEN工作服页面中的令牌。

现在您可以使用该coverallsJacoco任务发布覆盖率报告。

有关 CI 中的更多信息和用法,请参阅 https://github.com/nbaztec/coveralls-jacoco-gradle-plugin

于 2020-08-10T09:49:36.193 回答