1. Scala の設定と使用

Scala の設定と使用 

プロジェクトのビルドに使用する Scala バージョンの設定 

scalaVersion はコンパイルに使用する Scala のバージョンを設定します。デフォルトでは、sbt はこのバージョンの Scala ライブラリへの依存関係も追加します。この自動依存関係を無効にする方法については、次のセクションを参照してください。Scala バージョンが指定されていない場合、sbt がビルドされたバージョンが使用されます。Scala のバージョンを明示的に指定することをお勧めします。

たとえば、Scala のバージョンを「2.11.1」に設定するには、次のようにします。

scalaVersion := "2.11.1"

Scala ライブラリへの自動依存関係の無効化 

sbt はデフォルトで Scala 標準ライブラリへの依存関係を追加します。この動作を無効にするには、autoScalaLibrary 設定を false に設定します。

autoScalaLibrary := false

一時的に異なる Scala バージョンに切り替える 

すべてのスコープで Scala バージョンを特定の値に設定するには、++ コマンドを使用します。たとえば、一時的に Scala 2.10.4 を使用するには、次のように実行します。

> ++ 2.10.4

プロジェクトのビルドにローカル Scala インストールを使用する 

Scala ホームディレクトリへのパスを使用して scalaHome 設定を定義すると、その Scala インストールが使用されます。ローカル Scala バージョンを使用する場合でも、sbt は scalaVersion を設定する必要があります。例:

scalaVersion := "2.10.0-local"

scalaHome := Some(file("/path/to/scala/home/"))

複数の Scala バージョンに対してプロジェクトをビルドする 

クロスビルド を参照してください。

プロジェクトの依存関係をクラスパスに含めた Scala REPL を起動しますが、コンパイルされたプロジェクトクラスは含めない 

consoleQuick アクションは依存関係を取得し、それらを Scala REPL のクラスパスに配置します。プロジェクトのソースはコンパイルされませんが、ソース依存関係のソースはコンパイルされます。クラスパスにテスト依存関係を含めて、テストソースをコンパイルせずに REPL を起動するには、Test/consoleQuick を実行します。これにより、メインソースのコンパイルが強制されます。

プロジェクトの依存関係とコンパイルされたコードをクラスパスに含めた Scala REPL を起動する 

console アクションは依存関係を取得し、ソースをコンパイルして、それらを Scala REPL のクラスパスに配置します。クラスパスにテスト依存関係とコンパイルされたテストソースを含めて REPL を起動するには、Test/console を実行します。

クラスパスにプラグインとビルド定義を含めた Scala REPL を起動する 

> consoleProject

詳細については、consoleProject ページを参照してください。

Scala REPL の起動時に評価される初期コマンドを定義する 

console / initialCommands を設定して、console および consoleQuick の実行時に評価する初期ステートメントを設定します。consoleQuick を個別に設定するには、consoleQuick / initialCommands を使用します。例:

console / initialCommands := """println("Hello from console")"""

consoleQuick / initialCommands := """println("Hello from consoleQuick")"""

consoleProject コマンドは、consoleProject / initialCommands によって個別に構成されます。デフォルトでは、console / initialCommands の値は使用しません。例:

consoleProject / initialCommands := """println("Hello from consoleProject")"""

Scala REPL の終了時に評価されるコマンドを定義する 

console / cleanupCommands を設定して、console および consoleQuick によって開始された Scala REPL の終了後に評価するステートメントを設定します。consoleQuick を個別に設定するには、consoleQuick / cleanupCommands を使用します。例:

console / cleanupCommands := """println("Bye from console")"""

consoleQuick / cleanupCommands := """println("Bye from consoleQuick")"""

consoleProject コマンドは、consoleProject / cleanupCommands によって個別に構成されます。デフォルトでは、console / cleanupCommands の値は使用しません。例:

consoleProject / cleanupCommands := """println("Bye from consoleProject")"""

プロジェクトコードから Scala REPL を使用する 

sbt は sbt 自体と同じ JVM でテストを実行し、Scala クラスはアプリケーションクラスと同じクラスローダーにはありません。これは console の場合も、run がフォークされない場合も同様です。したがって、Scala インタープリターを使用する場合、次のようなエラーメッセージを回避するために、適切に設定することが重要です。

Failed to initialize compiler: class scala.runtime.VolatileBooleanRef not found.
** Note that as of 2.8 scala does not assume use of the java classpath.
** For the old behavior pass -usejavacp to scala, or if using a Settings
** object programmatically, settings.usejavacp.value = true.

重要なのは、embeddedDefaults を使用してインタープリターの設定を初期化することです。例:

val settings = new Settings
settings.embeddedDefaults[MyType]
val interpreter = new Interpreter(settings, ...)

ここで、MyType はインタープリターのクラスパスと、そのアプリケーションクラスローダーに含める必要のある代表的なクラスです。詳細については、embeddedDefaults が追加されることになった 元の提案 を参照してください。

同様に、次の例のように、ILoopbreak および breakIf メソッドを使用する場合、代表的なクラスを型引数として使用します。

def x(a: Int, b: Int) = {
  import scala.tools.nsc.interpreter.ILoop
  ILoop.breakIf[MyType](a != b, "a" -> a, "b" -> b )
}