запуск команды sbt на уровне мета-сборки

sbt позволяет нам запускать команды sbt на уровне корневого проекта.

Как я могу запускать команды на уровне мета-сборки? (это определено в root/project/project каталоге)

мой вариант использования заключается в том, что некоторые из моих плагинов sbt имеют разные версии одной и той же зависимости, а более старые зависимости удаляются. Я хотел бы исследовать с помощью sbt-dependency-graph


person lev    schedule 19.12.2017    source источник


Ответы (3)


Правильный способ сделать это — запустить sbt в root/project. Обычно вы просто запускаете его на root/, хитрость заключается в том, чтобы перейти в project и запустить его там. Если вы хотите проверить зависимости библиотеки, разрешенные в мета-сборке, вы можете добавить плагин графа зависимостей sbt в root/project/project/plugins.sbt (обратите внимание на повторение project), и тогда вы сможете запустить dependencyBrowseGraph из оболочки sbt.

person Jorge Vicente Cantero    schedule 19.12.2017

Вы можете использовать reload plugins из сеанса sbt основного проекта, чтобы переключиться в контекст проекта сборки:

sbt:root> reload plugins
[snip noise]

sbt:project> show libraryDependencies
[shows your sbt plugins from root/plugins.sbt along with their deps]

sbt:project> reload return
[back to the main project]

sbt:root>

Как Хорхе отметил, вы можете установить sbt-dependency-graph в мета-сборке root/project/project/plugins.sbt, чтобы сделать его доступным для контекста проекта сборки reload plugins. Как всегда, помните, что sbt является рекурсивным—из проекта сборки вы можете выполнить reload plugins снова, чтобы достичь уровня мета-сборки. Оттуда show libraryDependencies покажет, например, только sbt-dependency-graph из root/project/project.

На мой взгляд, это причудливый аспект sbt UX, потому что не совсем интуитивно понятно, что команда reload будет путем к этой функции, но пока вы помните эту часть, help reload дает хорошее резюме для вызова подкоманд.

Я не знаю, является ли это «неправильным» способом в каком-либо отношении, но я нахожу это более удобным, чем смена каталогов, поскольку мне не нужно запускать еще один сеанс sbt, и я могу перемещаться вперед и назад или рекурсивно без перезапуска.

person ches    schedule 29.12.2017

в качестве обходного пути я сделал следующее:

в файле root/project/plugins.sbt :

addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.8.2")

а в файле root/project/build.sbt:

(compile in Compile) := {
  (dependencyBrowseGraph in Compile).value
  (compile in Compile).value
}

это приводит к тому, что задача dependencyBrowseGraph запускается после компиляции. это решает мою конкретную проблему, но это не очень удобно, поэтому было бы неплохо услышать, как правильно это сделать.

person lev    schedule 19.12.2017