1. ホーム
  2. java

[解決済み] GradleでJaCoCoのカバレッジレポートをフィルタリングする

2022-04-25 16:12:13

質問

問題あり。

を持つプロジェクトがあります。 ジャココ で、特定のクラスやパッケージをフィルタリングできるようにしたいのです。

関連するドキュメント

以下のドキュメントを読みました。

公式 ジャココ のサイトをご覧ください。 http://www.eclemma.org/jacoco/index.html

公式 ジャココ のドキュメント グラドル : 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を除外する (には効果があるようです。 メーブン を使用しています。 グラドル )

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

質問です。

を生成する際に、特定のパッケージやクラスを除外するにはどうすればよいですか? ジャココ カバレッジレポートを作成できますか?

解決方法は?

ありがとうございました。 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

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

私の解決策 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/**'])
        })
    }
}

出典 https://github.com/jaredsburrows/android-gradle-java-app-template/blob/master/gradle/quality.gradle#L59