sbt compile

概要

sbt [query / ] compile
sbt [query / ] Test / compile

説明

compile タスクは、選択されたサブプロジェクトとそのサブプロジェクト依存関係をコンパイルする。sbt 2.x 以降、コンパイルされたアーティファクトは自動的にキャッシュされる。

生の Scala コンパイラでの Scala コードのコンパイルは遅いため、sbt の開発努力の相当部分はコンパイル高速化の様々な戦略に費やされている。

コンパイラ再起動のオーバーヘッドを削減

sbt server はバックグラウンドで稼働し続け、Scala のコンパイルが同じ Java 仮想マシン (JVM) 上で実行される。JVM を「温まった」状態に保つことでコンパイルが大幅に高速化される。コンパイラのクラスロードと Just-in-Time コンパイラによる最適化に時間がかかるためである。

差分コンパイル

任意のソース A.scala が変更されると、sbt は A.scala の変更に伴って再コンパイルされる他のソースファイルを最小限に抑えるよう努める。言語構成要素間の依存関係を追跡し、必要なソースのみを再コンパイルするこのプロセスは差分コンパイルと呼ばれる。

(リモート)キャッシュ

sbt 2.x では、コンパイルされたアーティファクトはセッションやビルド間でキャッシュされるだけでなく、Bazel 互換のリモートキャッシュを使って異なるマシン間でオプションとしてキャッシュすることもできる。詳細はキャッシュ化を参照。

Test / compile

Test / compile のようにコンフィギュレーションで compile タスクをスコープ付けすると、テストソースとそのソース依存関係をコンパイルする。

コンパイル設定

scalaVersion

コンパイルに使用する Scala のバージョン。

scalaVersion := "3.8.1"

scalacOptions

Scala コンパイラのオプション。

Compile / scalacOptions += "-Werror"

javacOptions

Java コンパイラのオプション。

Compile / javacOptions ++= List("-Xlint", "-Xlint:-serial")