有人可以解释我写这两行之间的区别:
resolvers in ThisBuild ++= appResolvers
resolvers in Global ++= appResolvers
答案 0 :(得分:25)
阅读Scopes以获取完整说明。
我会引用相关部分:
有三个范围轴:
- 项目
- 配置
- 任务
按项目轴确定范围
如果您将多个项目放在一个构建中,则每个项目都需要自己的设置。也就是说,键可以根据项目确定范围。
全球范围
每个示波器轴都可以使用轴类型的实例填充(例如,可以使用任务填充任务轴),或者可以使用特殊值Global填充轴。
在运行sbt
时引用范围键
*
可以针对每个轴显示,指的是Global
范围。
{.}/test:full-classpath
将项目轴设置为“整个构建”,其中构建为{.}
。可以在Scala代码中将{.}
写为ThisBuild
。参考构建定义中的范围
name in Global := "hello"
(
name in Global
隐式将范围轴Global
转换为范围,所有轴都设置为Global
;默认情况下,任务和配置已经Global
,所以这里效果是使项目Global
,即定义*/*:name
而不是{file:/home/hp/checkout/hello/}default-aea33a/*:name
)
如上所述,Global
将所有三个轴设置为Global
,而ThisBuild
仅将项目轴设置为{.}
。如果将ThisBuild
与其他轴配置相结合,这可能有意义:
name> set name in Test in ThisBuild := "test-name"
[info] Defining {.}/test:name
答案 1 :(得分:9)
这可能会在插件中使用:
resolvers in Global ++= appResolvers
虽然这可能出现在您的构建定义中:
resolvers in ThisBuild ++= appResolvers
从而允许您覆盖插件提供的全局默认值。
在同一个构建定义中,使用其中任何一个很可能具有相同的效果,因为它们是委托列表中的底部两个。