このページでは、sbt が特定のビルドの設定をロードするメカニズムと、ユーザーがすべてを制御できるフックについて概説します。
他の場所で述べたように、sbt は Setting[_]
オブジェクトを介して初期化グラフとタスクグラフを構築します。設定とは、ビルド状態の他の Keys
に保存されている値を取得し、特定のビルドキーの新しい値を生成できるものです。 sbt は、登録されたすべての Setting[_]
オブジェクトを巨大な線形シーケンスに変換し、それらをタスクグラフにコンパイルします。このタスクグラフは、ビルドを実行するために使用されます。
sbt のすべてのロードセマンティクスは、Load.scala ファイルに含まれています。おおよそ次のようになります。
青い円は、sbt がプロジェクトをロードするときに発生するアクションを表しています。 sbt はロード時に次のアクションを実行することがわかります。
ユーザーレベルのプロジェクトをコンパイルします (~/.sbt/<version>/
)
a. このプロジェクトで定義されたプラグインをロードします (~/.sbt/<version>/plugins/*.sbt
および ~/.sbt/<version>/plugins/project/*.scala
) b. 定義されたすべての設定をロードします (~/.sbt/<version>/*.sbt
および ~/.sbt/<version>/plugins/*.scala
)
現在のプロジェクトをコンパイルします (<working-directory/project
)
a. 定義されたすべてのプラグインをロードします (project/plugins.sbt
および project/project/*.scala
) b. プロジェクトをロード/コンパイルします (project/*.scala
)
*.sbt
ファイルをロードします (build.sbt
など)。これらの各ロードは、複数の設定シーケンスを定義します。 図は、最も重要な 2 つを示しています。
buildSettings
- これらは in ThisBuild
または Build
オブジェクトに対して直接定義された設定です。 それらは、ビルドに対して *1回* 初期化されます。 これらは、たとえば build.sbt
ファイルに追加できます。
ThisBuild / foo := "hi"
projectSettings
- これらはプロジェクトに固有の設定です。 それらは、ビルド内の*特定のサブプロジェクト*に固有です。 プラグインが複数のプロジェクトにその設定を提供している場合、値は各プロジェクトで複製されます。 プロジェクト固有の設定は、たとえば project/build.scala
に追加します。
lazy val root = (project in file(".")).settings(...)
すべてのビルド定義のロード/コンパイル後、sbt は順序付けなければならない Seq[Setting[_]]
のシリーズを持っています。 図に示すように、sbt のデフォルトの包含順序は次のとおりです。
~/.sbt/<version>/*.sbt
) で定義されたすべての設定build.sbt
)