有人可以解释一下这两行之间的区别吗:

resolvers in ThisBuild ++= appResolvers

resolvers in Global ++= appResolvers

最佳答案

阅读Scopes以获取完整说明。
我将引用相关部分:

因此,如上所述,Global将所有三个轴都设置为Zero,而ThisBuild仅将子项目轴设置为ThisBuild。如果将ThisBuild与其他轴(如配置)结合使用,则这可能很有意义:

> set ThisBuild / Test / name := "test-name"
[info] Defining ThisBuild / Test / name
更新2020年2月:正如Stefan K在评论中指出的,scope delegation rule是一个关键事实,我没有在上面的解释中进行介绍。

例如,如果发布配置引用projFoo / version,则其顺序如下:
  • projFoo / version
  • ThisBuild / version
  • Global / version

  • 如果默认设置的作用域为Global,例如version设置(请参阅inspect version),则使用ThisBuild / versionGlobal / version将能够为构建中的所有项目设置版本号。此处的ThisBuild选择几乎是按照惯例的。
    有时候,您可能想区分两种范围。首先是源依赖。 sbt具有内置支持,可以跨多个构建依赖子项目。在这些情况下,使用ThisBuild可以防止一种设置溢出到其他构建中。
    在某些情况下,某些功能专门引用全局范围的设置,通常是为了配置命令的行为和/或sbt本身的行为。 Global / concurrentRestrictions是一个例子。在这种情况下,必须使用Global / concurrentRestrictions

    关于sbt - ThisBuild和Global范围之间有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18289766/

    10-12 06:31