1. 依赖管理流程

依赖管理流程 

有一个关于库管理的入门页面,您可能想先阅读它。

此页面解释了compile 任务与库依赖管理之间的关系。

背景 

update 根据构建文件中的设置(如libraryDependenciesresolvers)解析依赖项。其他任务使用update 的输出(一个UpdateReport)来形成各种类路径。依次使用这些类路径的任务(如compilerun)因此间接依赖于update。这意味着在compile 能够运行之前,update 任务需要运行。但是,每次compile 都解析依赖项会不必要地慢,因此update 必须特别注意何时真正执行解析。

此外,sbt 1.x 引入了库管理 API (LM API) 的概念,它抽象了库管理的概念。从 sbt 1.3.0 开始,LM API 有两种实现:一种基于 Coursier,另一种基于 Apache Ivy。

缓存和配置 

  1. 如果自上次成功解析以来,没有库依赖项设置发生更改,并且检索到的文件仍然存在,则 sbt 不会要求依赖项解析器(如 Coursier)执行解析。
  2. 更改设置,例如添加或删除依赖项或更改依赖项的版本或其他属性,将自动导致执行解析。
  3. 直接运行update 任务(与依赖于它的任务相反)将强制执行解析,无论配置是否更改。
  4. 通过运行clean 来清除任务缓存也会导致执行解析。
  5. 覆盖所有上述内容,update / skip := true 将告诉 sbt 不要执行解析。注意,这会导致依赖任务失败。

关于 SNAPSHOT 的说明 

构建的可重复性至关重要,尤其是在您与他人共享构建时。SNAPSHOT 版本是本地测试内容的便捷方式,但其使用应仅限于本地机器,因为它引入了构建的可变性,这使得构建变得脆弱,并且依赖项解析速度变慢,因为即使在本地缓存了构件,也必须在网络上检查发布日期。

默认情况下,Coursier 中的SNAPSHOT 构件被赋予了24 小时生存时间 (TTL),以避免网络 IO。如果您需要强制重新解析SNAPSHOTS,请运行带有COURSIER_TTL 环境变量设置为0s 的 sbt。