2017-12-08 10 views
7

を使用してjacocoテスト範囲から、いくつかのJavaファイルを削除します。私はこのように行っている他、生成されたコードreport.For Jacacoテストカバレッジ内のいくつかのソースファイルを除外したいのGradle

classDirectories = fileTree(
      dir: "${project.buildDir}/intermediates/classes/debug/com", 
      excludes: [ 
        '**/R.class', 
        '**/R$*.class'] 
        ) 

しかし、ときに私のJavaファイルを除外するためにこのようにやろうとしています:

dir: "${project.buildDir}/intermediates/classes/debug/com", 
      excludes: [ 
       'src//java/com/example/application/Constants.java'] 

も、このように試してみました:'**/application/Constants.class' .ITは動作しません。ここにパスを含める必要がありますか:dir: "${project.buildDir}/intermediates/classes/debug/com"

私はAndroidスタジオ3.0を使用しています(ここでは問題はないと思います)。私がしようとしています全コード:タイプJacocoReportのタスクの

task jacocoTestReport(type: JacocoReport) { 
     group = "Reporting" 
     description = "Generate Jacoco coverage reports" 
     reports { 
      xml.enabled = true 
      html.enabled = true 
     } 

sourceDirectories = files(sourceSets) 

classDirectories = fileTree(
      dir: "${project.buildDir}/intermediates/classes/debug/com", 
      excludes: [ 
        'src//java/com/example/application/Constants.java',  //this is not working 
        '**/R.class', 
        '**/R$*.class', 
        '**/BuildConfig.*', 
        '**/Manifest*.*', 
        '**/*$ViewInjector*.*', 
        '**/*$ViewBinder*.*', 
        '**/*$Lambda$*.*', // Jacoco can not handle several "$" in class name. 
        '**/*Module.*', // Modules for Dagger. 
        '**/*Dagger*.*', // Dagger auto-generated code. 
        '**/*MembersInjector*.*', // Dagger auto-generated code. 
        '**/*_Provide*Factory*.*', 
        '**/*_Factory.*', //Dagger auto-generated code 
        '**/*$*$*.*', // Anonymous classes generated by kotlin 
        //add libraries 
        'android/**/*.*', 
        'com/**/*.*', 
        'uk/**/*.*', 
        'io/**/*.*', 
        //remove what we don't test 
        'androidTest/**/*.*', 
        'test/**/*.*', 
        '**/injector/**/*.*', 
        '**/model/**/*.*', 
        '**/mock/**/*.*', 
        '**/event/**/*.*', 
        '**/**_ViewBinding**', 
        '**/*EventType.*', 
        '**/**Mocked' 
      ] 

    ) 
    executionData = fileTree(dir: 'build/jacoco', include: '**/*.exec') 

} 
+0

あなたは、このようにクラスファイルを使用してみましたこんにちは、

はまた、あなたが簡単に、単純にそれを印刷することによってfileTree(...)呼び出しの結果をデバッグできることに注意してください: ''**/application/Constant.class''ですが、ソースファイルの名前は' 'Constants.java''です。あなたもこのタイプミスをしないで試しましたか?例えば'' **/Constants.class''? – Mayoares

+0

はい私は打ち間違いなしで試してみました – Shubham

答えて

2

classDirectoriesclassファイルではなく、javaソースファイルです。そして、私はあなたのディレクトリ

classDirectories = fileTree(
      dir: "${project.buildDir}/intermediates/classes/debug/com", 

classファイルが含まれているとjavaファイルが含まれていないことを確信しています。また、あなたが見ることができるように、他のパターンを約classファイルです:

   '**/R.class', 
       '**/R$*.class', 

そして、あなたの排他

  'src//java/com/example/application/Constants.java',  //this is not working 

が動作しない理由です。したがって、指定されたディレクトリにある既存のclassファイルと一致するように変更してください。私のプロジェクトで

tree.each {File file -> 
    println file 
} 
+0

あなたの答えをありがとう、私はこのようなクラスファイルを使用しようとしました: '**/application/Constant.class'。 **は何を参照していますか?私の理解によると、それはパッケージ内のものを指します。これは私にとってはうまくいかないようです。 – Shubham

+0

@Shubham 'fileTree'の結果をデバッグする方法については既に説明しましたので、デバッグしてください。 **あなたの問題が完全に**実証されていることから、** [最小、完全、および検証可能な例](https://stackoverflow.com/help/mcve)なしのIMOでは、特に類似の設定が他の人にとってうまく動作すること – Godin

3

、このような設定:

//exclude the folders we do not want to check 
jacocoTestReport { 
    afterEvaluate { 
     classDirectories = files(classDirectories.files.collect { 
      fileTree(dir: it, exclude: [ 
        '**/enum/**', 
        '**/util/**', 
      ]) 
     }) 
    } 
} 
+0

複数のクラスディレクトリを追加できますか?私はそうすることができませんでした! – Shubham

+0

@Shubhamオフにすることができます。コード内の ''**/enum/**''のようなパッケージパスをリストに追加するだけです。 –

+0

例を挙げることができれば素晴らしいことでしょう。中間ファイルとソースディレクトリからclassファイルとjavaファイルの両方を除外します。 – Shubham

関連する問題