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
おわり。