与sbt中的`{.}/*:name`和`*/*:name`不同?

Fre*_*ind 6 scope global sbt

从一些sbt文档(例如范围),我看到:

{.}/*:name
Run Code Online (Sandbox Code Playgroud)

意思nameentire build(name in ThisBuild用来定义它)

*/*:name
Run Code Online (Sandbox Code Playgroud)

意思nameglobal project(name in Global用来定义它)

(PS:我忽略了配置部分*:)

但是,我仍然不知道它们之间有什么区别,它们对我来说似乎完全一样.

我能用一个而不是另一个做任何事吗?

Ren*_*tov 2

您在 ThisBuild 中指定的任何版本都将应用于构建中的所有项目,覆盖 Global 中可能定义的任何内容。

例如:键“版本”

对于全局范围,它在 Defaults.scala 中定义为值“0.1-SNAPSHOT”。

对于此构建中的项目,您可能需要使用以下内容覆盖它:

version in ThisBuild := "3.0.1"
Run Code Online (Sandbox Code Playgroud)

因此,由于 [{.}/*:version] 优先于 [*/*:version],因此每当您在项目中获得“version”时,您都会获取“3.0.1”而不是“0.1-SNAPSHOT”。

这几乎解释了其中的区别以及如何使用其中一个而不是另一个。