• 作成:

gradle-scalatestはGradleのバージョンが合わないと謎のエラーを吐くので注意しましょう

問題

JavaとGradleでビルドしているプロジェクトにScalaソースコードを突っ込むことにしました.

テスト駆動開発をする予定なのでまずはScalaTestを導入することにしました.

scala - Can't run Scalatest with Gradle - Stack Overflow に書かれている通りGradleは初期状態だとScalaTestを認識せずにかなり面倒な記述が必要になるので, デコレーター(で良いのか?)とかが必要としないものを探しました.

本当はsbtでScalaもJavaもビルドするのが良いのですけれどね.

そうしたら maiflai/gradle-scalatest: A plugin to enable the use of scalatest in a gradle Scala project. というのが見つかったので早速プラグインを適用してみたところエラーが発生しました.

> Task :test FAILED
Task ':test' is not up-to-date because:
  Executed with '--rerun-tasks'.
:test (Thread[Execution worker for ':',5,main]) completed. Took 0.014 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':test'.
> No signature of method: static org.gradle.process.internal.DefaultExecActionFactory.root() is applicable for argument types: () values: []
  Possible solutions: wait(), stop(), wait(long), print(java.io.PrintWriter), print(java.lang.Object), wait(long, int)

* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1s
3 actionable tasks: 3 executed
Stopped 1 worker daemon(s).

原因

色々調べてみたところ, Gradleのバージョン要求が結構厳しかったことに気が付きました. 手元のGradleはバージョン5.0だったのでそれに合わせてgradle-scalatestをダウングレードしたら動きました.

大きくREADMEにCompatibilityと書かれていたのに気が付きませんでした…

その後手元のGradleも5系の最新版にアップデートしたところ最新版のgradle-scalatestでも動きました. Gradle wrapper のバージョン更新についてのメモ - Qiita 6系は何の破壊的変更なのかわかりませんが, プロジェクトと互換性がありませんでした…

バージョンが合わないとエラー内容ではっきり出してくれると嬉しいとは思いますが, そうすると互換ツールとかで動かなくなるので悩みどころですね.