GradleでJaCoCoカバレッジレポートをフィルタリングする 質問する

GradleでJaCoCoカバレッジレポートをフィルタリングする 質問する

問題:

私はプロジェクトを持っています特定のクラスやパッケージをフィルタリングできるようにしたいと考えています。

関連ドキュメント:

私は以下のドキュメントを読みました:

正式サイト: http://www.eclemma.org/jacoco/index.html

正式ドキュメント: https://gradle.org/docs/current/userguide/jacoco_plugin.html

正式 Github問題、カバレッジの作業: https://github.com/jacoco/jacoco/wiki/フィルタリングオプション https://github.com/jacoco/jacoco/issues/14

関連する StackOverflow リンク:

JaCoCo & Gradle - フィルタリング オプション(回答なし)

Sonarrunner と Gradle を使用して Jacoco レポートからパッケージを除外する(使用していない

JaCoCo - レポートから JSP を除外する(効果があるようです、 使っています

Maven Jacoco 構成 - レポートからクラス/パッケージを除外できない(効果があるようです、 使っています

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"]
        }
    }
}

質問:

生成時に特定のパッケージやクラスを除外するにはどうすればいいですか?報道レポートですか?

ベストアンサー1

感謝Yannick Welsch:

Googleで検索し、Gradleのドキュメントを読み、StackOverflowの古い投稿を調べたところ、公式のフォーラム!

jacocoTestReport {
    afterEvaluate {
        classDirectories.setFrom(files(classDirectories.files.collect {
            fileTree(dir: it, exclude: 'com/blah/**')
        }))
    }
}

ソース: https://issues.gradle.org/browse/GRADLE-2955

5.x未満の古いGradleバージョンでは、classDirectories = files(classDirectories.files.collect {代わりにclassDirectories.setFrom

build.gradleJava/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/**'])
        })
    }
}

ソース: https://github.com/jaredsburrows/android-gradle-java-app-template/blob/master/gradle/quality.gradle#L59

おすすめ記事