Создайте несколько задач publi sh в sbt с кросс-компиляцией - PullRequest
1 голос
/ 02 апреля 2020

У меня есть мультипроект sbt build и я хочу создать несколько команд publi sh для публикации различных подмножеств проектов.

Для скорости я обычно хочу публиковать sh только проекты a и b для двух Scala версий, но иногда (например, при выпуске версии) я хочу опубликовать sh все зависимости, включая проекты c и d.

build.sbt:

val scala212 = "2.12.10"
val scala211 = "2.11.8"
val supportedScalaVersions = Seq(scala212, scala211)
...

lazy val global = project
  .in(file("."))
  .settings(crossScalaVersions := Nil, ...)
  .aggregate(a, b)

lazy val a = project(...)
lazy val b = project(...)
lazy val c = project(...)
lazy val d = project(...)

...

Обратите внимание, что для crossScalaVersion установлено значение nil в агрегирующем проекте, как рекомендовано в ссылке sbt

sbt +publish опубликует sh только проекты a и b в обоих случаях. Если мне нужно опубликовать sh всех зависимостей, я публикую sh их отдельно из консоли sbt.

sbt> +publish; +c/publish; +d/publish

Как создать одну команду (+publishAll), которая опубликует sh все подпроекты в обеих Scala версиях с сохранением по умолчанию publish только публикация команды a и b?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Добавить в build.sbt

addCommandAlias("publishAll", "publish; c/publish; d/publish")

Нормальный publish всегда будет работать для вашего root проекта и объединяет его проекты, поэтому вы можете перемещать файлы вашего root проекта в подпроект и изменять на чем он агрегируется.

1 голос
/ 02 апреля 2020

Попробуйте all в сочетании с inAnyProject примерно так

val publishAll = taskKey[Unit]("Publish all projects")
publishAll := publish.all(ScopeFilter(inAnyProject)).value

, которая выполнит задачу publish во всех проектах, даже в тех, которые не агрегированы в проекте root.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...