ThisBuild和Global范围有什么区别?

Seb*_*ber 35 sbt

有人可以解释我写这两行之间的区别:

resolvers in ThisBuild ++= appResolvers

resolvers in Global ++= appResolvers
Run Code Online (Sandbox Code Playgroud)

Eug*_*ota 25

阅读范围以获得完整说明.

我会引用相关部分:

有三个范围轴:

  • 项目
  • 配置
  • 任务

按项目轴确定范围

如果将多个项目放在一个构建中,则每个项目都需要自己的设置.也就是说,键可以根据项目确定范围.

全球范围

可以使用轴类型的实例填充每个示波器轴(例如,可以使用任务填充任务轴),或者可以使用特殊值Global填充轴.

在运行sbt时引用范围键

*可以针对每个轴显示,参考Global范围.

  • {.}/test:full-classpath将项目轴设置为构建所在的"整个构建" {.}.{.}可以用ThisBuildScala代码编写.

引用构建定义中的范围

name in Global := "hello"
Run Code Online (Sandbox Code Playgroud)

(name in Global隐式地将范围轴转换为Global所有轴都设置为的范围Global;任务和配置已经Global默认,因此这里的效果是制作项目Global,即定义*/*:name而不是{file:/home/hp/checkout/hello/}default-aea33a/*:name)

如上所述,Global将所有三个轴都设置为,GlobalThisBuild仅将项目轴设置为{.}.如果您ThisBuild与其他轴配置相结合,这可能有意义:

name> set name in Test in ThisBuild := "test-name"
[info] Defining {.}/test:name
Run Code Online (Sandbox Code Playgroud)

  • 这并没有解释为什么需要区分ThisBuild和Global以及为什么应该使用其中一个或另一个.两者中是否存在任何设置,它们之间通常是不同的? (4认同)
  • 谢谢,将不得不再次阅读入门指南,因为我没有很好地抓住那个轴部分......顺便感谢你的精彩scalaz教程:) (3认同)
  • 我仍然无法区分`*/test:name`和`{.}/test:name`,求助!请参阅我的相关问题:http://stackoverflow.com/questions/25841527/difference-from-name-and-name-in-sbt (2认同)
  • 答案的关键句是:“因此,如上所述,`Global`将所有三个轴**设置为`Global`,而`ThisBuild`仅将项目轴**设置为{{。}。”。 (2认同)

Ren*_*tov 9

这可能会在插件中使用:

resolvers in Global ++= appResolvers
Run Code Online (Sandbox Code Playgroud)

虽然这可能出现在您的构建定义中:

resolvers in ThisBuild ++= appResolvers
Run Code Online (Sandbox Code Playgroud)

从而允许您覆盖插件提供的全局默认值.

在同一个构建定义中,使用任何一个很可能具有相同的效果,因为它们是委托列表中的底部两个.