Подтвердить что ты не робот

В чем разница между областями ThisBuild и Global?

Может кто-нибудь объяснить мне разницу между написанием этих двух строк:

resolvers in ThisBuild ++= appResolvers

resolvers in Global ++= appResolvers
4b9b3361

Ответ 1

Подробнее читайте Scopes.

Я приведу соответствующие разделы:

Есть три оси осей:

  • Проекты
  • Конфигурация
  • Задачи

Определение масштаба по оси проекта

Если вы ставите несколько проектов в одну сборку, каждый проект нуждается в собственных настройках. То есть, ключи могут быть ограничены в соответствии с проектом.

Глобальная область

Каждая ось области может быть заполнена экземпляром типа оси (например, ось задачи может быть заполнена заданием), или ось может быть заполнена специальным значением Global.

Ссылаясь на скользящие ключи при запуске sbt

* может отображаться для каждой оси, ссылаясь на область Global.

  • {.}/test:full-classpath устанавливает ось проекта в "целую сборку", где сборка {.}. {.} может быть записано ThisBuild в коде Scala.

Обращение к областям в определении сборки

name in Global := "hello"

(name in Global неявно преобразует ось области видимости Global в область со всеми осями, установленными на Global, задача и конфигурация уже Global по умолчанию, поэтому здесь нужно сделать проект Global, то есть define */*: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

Ответ 2

Это, вероятно, будет использоваться в плагине:

resolvers in Global ++= appResolvers

В то время как это может появиться в вашем определении сборки:

resolvers in ThisBuild ++= appResolvers

что позволяет вам переопределить глобальное значение по умолчанию, предлагаемое плагином.

В рамках одного и того же определения сборки использование одного из них, скорее всего, будет иметь эквивалентный эффект, поскольку они являются нижними двумя в списке делегатов.