有一个关于库管理的入门页面,您可能想先阅读它。
此页面解释了compile 任务与库依赖管理之间的关系。
update 根据构建文件中的设置(如libraryDependencies 和resolvers)解析依赖项。其他任务使用update 的输出(一个UpdateReport)来形成各种类路径。依次使用这些类路径的任务(如compile 或run)因此间接依赖于update。这意味着在compile 能够运行之前,update 任务需要运行。但是,每次compile 都解析依赖项会不必要地慢,因此update 必须特别注意何时真正执行解析。
此外,sbt 1.x 引入了库管理 API (LM API) 的概念,它抽象了库管理的概念。从 sbt 1.3.0 开始,LM API 有两种实现:一种基于 Coursier,另一种基于 Apache Ivy。
update 任务(与依赖于它的任务相反)将强制执行解析,无论配置是否更改。clean 来清除任务缓存也会导致执行解析。update / skip := true 将告诉 sbt 不要执行解析。注意,这会导致依赖任务失败。构建的可重复性至关重要,尤其是在您与他人共享构建时。SNAPSHOT 版本是本地测试内容的便捷方式,但其使用应仅限于本地机器,因为它引入了构建的可变性,这使得构建变得脆弱,并且依赖项解析速度变慢,因为即使在本地缓存了构件,也必须在网络上检查发布日期。
默认情况下,Coursier 中的SNAPSHOT 构件被赋予了24 小时生存时间 (TTL),以避免网络 IO。如果您需要强制重新解析SNAPSHOTS,请运行带有COURSIER_TTL 环境变量设置为0s 的 sbt。