1. 設定の初期化

設定の初期化 

このページでは、sbt が特定のビルドの設定をロードするメカニズムと、ユーザーがすべてを制御できるフックについて概説します。

他の場所で述べたように、sbt は Setting[_] オブジェクトを介して初期化グラフとタスクグラフを構築します。設定とは、ビルド状態の他の Keys に保存されている値を取得し、特定のビルドキーの新しい値を生成できるものです。 sbt は、登録されたすべての Setting[_] オブジェクトを巨大な線形シーケンスに変換し、それらをタスクグラフにコンパイルします。このタスクグラフは、ビルドを実行するために使用されます。

sbt のすべてのロードセマンティクスは、Load.scala ファイルに含まれています。おおよそ次のようになります。

image

青い円は、sbt がプロジェクトをロードするときに発生するアクションを表しています。 sbt はロード時に次のアクションを実行することがわかります。

  1. ユーザーレベルのプロジェクトをコンパイルします (~/.sbt/<version>/)

    a. このプロジェクトで定義されたプラグインをロードします (~/.sbt/<version>/plugins/*.sbt および ~/.sbt/<version>/plugins/project/*.scala) b. 定義されたすべての設定をロードします (~/.sbt/<version>/*.sbt および ~/.sbt/<version>/plugins/*.scala)

  2. 現在のプロジェクトをコンパイルします (<working-directory/project)

    a. 定義されたすべてのプラグインをロードします (project/plugins.sbt および project/project/*.scala) b. プロジェクトをロード/コンパイルします (project/*.scala)

  3. プロジェクトの *.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 のデフォルトの包含順序は次のとおりです。

  1. すべての AutoPlugin 設定
  2. ユーザーディレクトリ (~/.sbt/<version>/*.sbt) で定義されたすべての設定
  3. すべてのローカル構成 (build.sbt)