GroovyのテストフレームワークSpockの最新版(開発版)は1.0-groovy-2.3-SNAPSHOT
でしたが、先週末(2015/2/28-3/2)にSNAPSHOTが更新され、Gradle 2.2.1(で、gradleApi()
をdependencyに入れている場合)ではtestタスクが失敗するようになりました。
gradleApi()
は、プラグインを書くために使用しています。
こんな書き方の場合です。
dependencies {
compile gradleApi()
compile localGroovy()
:
testCompile 'org.spockframework:spock-core:1.0-groovy-2.3-SNAPSHOT'
}
1.0-groovy-2.3-SNAPSHOT
がgroovy-all:2.3.10に依存するようになり、バージョンの競合が発生しているようです。
org.spockframework.util.InternalSpockError: Failed to instantiate spec 'XxxSpec'
:
Caused by: java.lang.ExceptionInInitializerError
:
Caused by: groovy.lang.GroovyRuntimeException: Conflicting module versions. Module [groovy-all is loaded in version 2.3.6 and you are trying to load version 2.3.10
最初は
compile localGroovy()
と書いているのが原因かと思い
compile 'org.codehaus.groovy:groovy-all:2.3.10'
としましたが変わらず、原因はgradleApi()
のようでした。
以下のようにspockのdependencyからgroovy-all
を外してやれば、これまで通りに動くようになりました。
dependencies {
compile gradleApi()
compile localGroovy()
:
testCompile ('org.spockframework:spock-core:1.0-groovy-2.3-SNAPSHOT') {
exclude group: 'org.codehaus.groovy', module: 'groovy-all'
}
}
あるいはtransitive = false
でも問題なさそうです。
dependencies {
compile gradleApi()
compile localGroovy()
:
testCompile ('org.spockframework:spock-core:1.0-groovy-2.3-SNAPSHOT') {
transitive = false
}
}
なお、Groovy 2.4を使っている場合は、新しく追加された1.0-groovy-2.4-SNAPSHOT
が使えます。
(2015/03/05 追記)
1.0の正式版がリリースされました。
上記の1.0-groovy-2.3-SNAPSHOT
と1.0-groovy-2.4-SNAPSHOT
は使えなくなっています。
1.0-groovy-2.3
または1.0-groovy-2.4
を使えば良さそうです。