• 作成:

sbtのマルチプロジェクトでテスト用Scalaクラスを他のプロジェクトから利用する方法

プロジェクトの状態

rootプロジェクトにテストに使うためのクラスがあります. テスト用データ生成などを行うutilプロジェクトでそのクラスを利用したくなりました.

しかしrootプロジェクトのテストに使うためのクラスはテスト時にしかコンパイルされないため, 普通にdependsOnしても利用できません.

しかし sbt Reference Manual — マルチプロジェクト・ビルドをよく読めばちゃんと解決方法が書いてありました.

dependsOnのクエリを弄る方法

sbtのutilセクションに

.dependsOn(root % "compile->test")

と書けばutilがrootのテスト用classをimport出来るようになります.

手っ取り早い.

テスト用ライブラリを作る方法

これは試してないので想像ですが. テスト用ライブラリをプロジェクトとして作って, rootは.dependsOn(testLib % "test")と書いて, utilは.dependsOn(testLib)などと書けば, rootでテスト用コードを非テスト時に読み込まずに, utilではテスト用コードを非テスト時に読み込むことが出来るでしょう.

多分こちらの方がちゃんとした方法だと思います. マルチプロジェクトがたくさんになってきたらこちらの方が良いでしょう.