有人可以解释一下这两行之间的区别吗:
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 / version
或Global / version
将能够为构建中的所有项目设置版本号。此处的ThisBuild
选择几乎是按照惯例的。有时候,您可能想区分两种范围。首先是源依赖。 sbt具有内置支持,可以跨多个构建依赖子项目。在这些情况下,使用
ThisBuild
可以防止一种设置溢出到其他构建中。在某些情况下,某些功能专门引用全局范围的设置,通常是为了配置命令的行为和/或sbt本身的行为。
Global / concurrentRestrictions
是一个例子。在这种情况下,必须使用Global / concurrentRestrictions
。关于sbt - ThisBuild和Global范围之间有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18289766/