Sbt 这个构建和全局作用域之间有什么区别?
有人能给我解释一下写这两行的区别吗Sbt 这个构建和全局作用域之间有什么区别?,sbt,Sbt,有人能给我解释一下写这两行的区别吗 resolvers in ThisBuild ++= appResolvers resolvers in Global ++= appResolvers 阅读完整的解释 我将引用相关部分: 有三个范围轴: 子项目轴 依赖项配置轴 任务轴 按项目轴划分范围 如果在单个生成中放置多个项目,则每个项目都需要自己的设置。也就是说,可以根据项目确定键的范围 项目轴也可以设置为ThisBuild,这意味着“整个构建”,因此设置应用于整个构建,而不是单个项目。当项目
resolvers in ThisBuild ++= appResolvers
resolvers in Global ++= appResolvers
阅读完整的解释
我将引用相关部分:
有三个范围轴:
- 子项目轴
- 依赖项配置轴
- 任务轴
ThisBuild
,这意味着“整个构建”,因此设置应用于整个构建,而不是单个项目。当项目未定义特定于项目的设置时,生成级别设置通常用作备用设置
零范围组件
每个范围轴可以用轴类型的实例填充(类似于Some()
),或者可以用特殊值Zero
填充轴。因此,我们可以将Zero
视为None
Zero
是所有范围轴的通用回退,但在大多数情况下,它的直接使用应该保留给sbt和插件作者
Global
是将Zero
设置为所有轴的作用域:Zero/Zero/Zero
。换句话说,Global/someKey
是Zero/Zero/Zero/someKey
的缩写
在生成定义中引用作用域
(Global/concurrentRestrictions
隐式转换为Zero/Zero/concurrentRestrictions
,将所有轴设置为Zero
范围组件;默认情况下任务和配置已经是Zero
,因此这里的效果是使项目Zero
,即定义Zero/Zero/Z)ero/concurrentRestrictions
而不是ProjectRef(uri(“file:/tmp/hello/”,“root”)/Zero/Zero/concurrentRestrictions
)
如上所述,Global
将所有三个轴设置为Zero
,而ThisBuild
仅将子项目轴设置为ThisBuild
。如果将ThisBuild
与其他类似轴的配置相结合,这可能是有意义的:
> set ThisBuild / Test / name := "test-name"
[info] Defining ThisBuild / Test / name
2020年2月更新:正如Stefan K在评论中所指出的,这是一个关键事实,我没有将其包括在上述解释中
规则4:给定一个范围,通过按以下顺序替换子项目轴来搜索委托范围:给定子项目,ThisBuild
,然后Zero
例如,如果发布配置引用的是projFoo/version
,则其顺序如下:
projFoo/version
此构建/版本
全局/版本
全局
,如版本
设置(请参见检查版本
),使用ThisBuild/version
或Global/version
将能够为构建中的所有项目设置版本号。这里选择ThisBuild
几乎是按照惯例
有时可能需要区分这两个作用域。首先是源依赖关系。sbt有一个内置的支持,可以跨多个构建依赖于子项目。在这些情况下,使用ThisBuild
可以防止一个设置溢出到其他构建
在某些情况下,某些功能特别引用全局范围的设置,通常用于配置命令的行为和/或sbt本身的行为。
Global/concurrentRestrictions
就是一个例子。在这种情况下,必须使用Global/concurrentRestrictions
,这可能用于n插件:
resolvers in Global ++= appResolvers
然而,这可能会出现在生成定义中:
resolvers in ThisBuild ++= appResolvers
从而允许您覆盖插件提供的全局默认值
在同一个构建定义中,使用其中任何一个都很可能具有同等的效果,因为它们是代理列表中的最后两个。谢谢,我必须再次阅读《入门指南》,因为我没有很好地理解axis部分……顺便说一句,感谢您的精彩scalaz教程:)我还是分不清
*/test:name
和{.}/test:name
之间的区别,救命!参见我的相关问题:答案中的关键句子是:“如上所述,Global
将所有三个轴设置为Global
,而ThisBuild
仅将项目轴设置为{.}
”。这并不能回答为什么需要区分ThisBuild和Global,以及为什么应该使用其中一个或另一个。两者中是否存在任何设置,并且它们之间通常不同?我缺少的链接是SBT文档中的这一行:规则4:给定一个范围,通过按以下顺序替换子项目轴来搜索委托范围:给定子项目、ThisBuild,然后是零代码>
resolvers in ThisBuild ++= appResolvers