ライブラリ管理に関する入門ページがあります。最初に読んでおくことをお勧めします。
このページでは、compile
タスクとライブラリの依存関係管理の関係について説明します。
update
は、libraryDependencies
や resolvers
などのビルドファイルの設定に従って依存関係を解決します。他のタスクは update
の出力 (UpdateReport
) を使用して、さまざまなクラスパスを形成します。compile
や run
など、これらのクラスパスを使用するタスクは、間接的に update
に依存します。これは、compile
を実行する前に、update
タスクを実行する必要があることを意味します。ただし、すべての compile
で依存関係を解決するのは unnecessarily 遅いので、update
は実際に解決を実行するタイミングに注意する必要があります。
さらに、sbt 1.x は、ライブラリ管理の概念を抽象化した Library Management API (LM API) の概念を導入しました。 sbt 1.3.0 現在、LM API には Coursier ベースと Apache Ivy ベースの 2 つの実装があります。
update
タスクを直接実行すると、設定が変更されたかどうかに関係なく、強制的に解決が実行されます。clean
を実行してタスクキャッシュをクリアすると、解決も実行されます。update / skip := true
は、sbt に解決を決して実行しないように指示します。これは、依存タスクが失敗する可能性があることに注意してください。特にビルドを他の人と共有する場合、ビルドの再現性は非常に重要です。 SNAPSHOT
バージョンはローカルで何かをテストする便利な方法ですが、ビルドに可変性をもたらすため、脆くなり、アーティファクトがローカルにキャッシュされている場合でも、公開日をネットワーク経由でチェックする必要があるため、依存関係の解決が遅くなるため、その使用はローカルマシンに限定する必要があります。
デフォルトでは、Coursier の SNAPSHOT
アーティファクトには、ネットワーク IO を回避するために 24 時間の有効期間 (TTL) が与えられます。 SNAPSHOT
の再解決を強制する必要がある場合は、COURSIER_TTL
環境変数を 0s
に設定して sbt を実行します。