有一个关于库管理的入门页面,您可能想先阅读它。
此页面解释了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。