しおしお

IntelliJのあれやこれや

Gradleのcoberturaプラグイン2.2.7以上で発生するClassNotFoundExceptionへの対処方法

Gradleのcobertura-pluginのバージョンを2.2.7以上に上げた場合にClassNotFoundExceptionがでてテストが実行できない件の対処方法。

build.gradleの内容

plugins {
  id 'net.saliman.cobertura' version '2.2.8'
}

group 'siosio.test'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.7

repositories {
  mavenCentral()
}

dependencies {
  testCompile 'junit:junit:4.12'
}

task wrapper(type: Wrapper) {
  gradleVersion = '2.2'
}

test {


  cobertura {
    coverageSourceDirs = ["${projectDir}/src/main/java/"]
    coverageIgnoreTrivial = true
    coverageFormats = ['html']
    coverageDirs = [project.sourceSets.main.output.classesDir]
  }
}

発生するエラー

こんな感じにClassNotFoundExceptionが発生する。

:test
siosio.CalcTest > name FAILED
    java.lang.NoClassDefFoundError at CalcTest.java:15
        Caused by: java.lang.ClassNotFoundException at CalcTest.java:15

原因

ClassNotFoundException on 2.2.7 but 2.2.6 · Issue #75 · stevesaliman/gradle-cobertura-plugin · GitHubに書かれている通りで、
使用するcoberturaのバージョンが上がってslf4jを使用するようになったため。
プロジェクトの依存にslf4jがあれば問題がないけど、ない場合には追加してあげないとダメっぽいです。

対処内容

issueのページの一番最後に書いてある、nopのloggerを依存に追加してあげる。
こんな感じですね。

  testRuntime 'org.slf4j:slf4j-nop:1.7.12' // for cobertura

これでまともに動くようになりました。

:testClasses
:test
:generateCoberturaReport
Cobertura 2.1.1 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
Report time: 366ms

おわり。