1. 依存関係管理フロー

依存関係管理フロー 

ライブラリ管理に関する入門ページがあります。最初に読んでおくことをお勧めします。

このページでは、compile タスクとライブラリの依存関係管理の関係について説明します。

背景 

update は、libraryDependenciesresolvers などのビルドファイルの設定に従って依存関係を解決します。他のタスクは update の出力 (UpdateReport) を使用して、さまざまなクラスパスを形成します。compilerun など、これらのクラスパスを使用するタスクは、間接的に update に依存します。これは、compile を実行する前に、update タスクを実行する必要があることを意味します。ただし、すべての compile で依存関係を解決するのは unnecessarily 遅いので、update は実際に解決を実行するタイミングに注意する必要があります。

さらに、sbt 1.x は、ライブラリ管理の概念を抽象化した Library Management API (LM API) の概念を導入しました。 sbt 1.3.0 現在、LM API には Coursier ベースと Apache Ivy ベースの 2 つの実装があります。

キャッシングと設定 

  1. 前回の解決が成功して以来、ライブラリの依存関係設定が変更されておらず、取得したファイルがまだ存在する場合、sbt は依存関係リゾルバー (Coursier など) に解決の実行を要求しません。
  2. 依存関係を追加または削除したり、依存関係のバージョンまたはその他の属性を変更したりするなど、設定を変更すると、自動的に解決が実行されます。
  3. (依存するタスクではなく) update タスクを直接実行すると、設定が変更されたかどうかに関係なく、強制的に解決が実行されます。
  4. clean を実行してタスクキャッシュをクリアすると、解決も実行されます。
  5. 上記をすべてオーバーライドする update / skip := true は、sbt に解決を決して実行しないように指示します。これは、依存タスクが失敗する可能性があることに注意してください。

SNAPSHOT についての注意事項 

特にビルドを他の人と共有する場合、ビルドの再現性は非常に重要です。 SNAPSHOT バージョンはローカルで何かをテストする便利な方法ですが、ビルドに可変性をもたらすため、脆くなり、アーティファクトがローカルにキャッシュされている場合でも、公開日をネットワーク経由でチェックする必要があるため、依存関係の解決が遅くなるため、その使用はローカルマシンに限定する必要があります。

デフォルトでは、Coursier の SNAPSHOT アーティファクトには、ネットワーク IO を回避するために 24 時間の有効期間 (TTL) が与えられます。 SNAPSHOT の再解決を強制する必要がある場合は、COURSIER_TTL 環境変数を 0s に設定して sbt を実行します。