Как указать sbt использовать ночную сборку Scala 2.12 или 2.13?

Я хочу протестировать свой код на новейших ночных версиях Scala.

ответ для Scala 2.10 больше не работает.

Что я делаю?


person Seth Tisue    schedule 16.11.2016    source источник


Ответы (1)


Скала 2.12 или 2.13

быстрая версия

Global / resolvers += "scala-integration" at
  "https://scala-ci.typesafe.com/artifactory/scala-integration/"
scalaVersion := "2.13.1-bin-abcd123"

для ночного 2.12 замените, например. 2.12.9 за 2.13.1; в любом случае это номер версии следующего выпуска в этой ветке

для abcd123 вручную подставьте первые 7 символов SHA последней зеленой сборки на 2.13 .x или 2.12.x ветка на Travis-CI.

более длинное объяснение

Команда Scala больше не публикует -SNAPSHOT версий Scala. (Запуск этого снова может быть вкладом сообщества; см. эту заявку. )

Но команда публикует ночные сборки, каждая со своим фиксированным номером версии. Номер версии nightly выглядит, например. 2.13.1-bin-abcd123. (-bin- сигнализирует о бинарной совместимости с sbt; все выпуски 2.13.x, начиная с 2.13.0, бинарно совместимы друг с другом.)

Старый ответ на основе Jenkins, который раньше был здесь, больше не работает, поскольку мы (в 2018 году) перенесли публикацию ночных новостей с Jenkins на Travis-CI.

Чтобы сказать sbt использовать одну из этих ночных сорочек, вам нужно сделать три вещи.

Во-первых, добавьте преобразователь, в котором хранятся ночные часы:

Global / resolvers += "scala-integration" at
  "https://scala-ci.typesafe.com/artifactory/scala-integration/"

Во-вторых, укажите версию Scala:

scalaVersion := "2.13.1-bin-abcd123"

Но это не настоящий номер версии. Вручную замените номер версии, содержащий 7-значный SHA последней фиксации, в репозиторий scala/scala для который был опубликован ночной билд. Посмотрите на https://travis-ci.org/scala/scala/branches и вы увидите SHA в правом верхнем углу раздела 2.13.x (или 2.12.x). Например:

введите здесь описание изображения

Как только будет выпущена версия 2.13.1, номер версии в nightly изменится на 2.13.2 и так далее.

Если у вас многопроектная сборка, обязательно задайте эти параметры для всех проектов при изменении определения сборки. Или вы можете временно установить их в оболочке sbt с помощью ++2.13.1-bin-abcd123 (sbt 0.13.x) или ++2.13.1-bin-abcd123! (sbt 1.x; добавленный восклицательный знак необходим для принудительного использования версии, не включенной в crossScalaVersions).

В идеале мы бы предложили автоматический способ запрашивать у Travis-CI правильный SHA. Предположительно это возможно через API Travis-CI, но (насколько мне известно) никто еще не изучал это. (Есть доброволец?)

Обратите внимание, что мы неофициально называем эти «ночные» сборки, но технически это неправильное название. На каждый объединенный PR строится так называемый «ночной».

Скала 2.14

В репозитории Scala может никогда не быть ветки 2.14.x, но если она есть, будут применяться следующие инструкции:

То же, что и выше, но посмотрите на ветку 2.14.x для SHA и версию номер начинается с 2.14.0-pre- (обратите внимание, что -pre- не -bin-, так как бинарная совместимость еще не заморожена для 2.14).

Так, например, 2.14.0-pre-abcd123.

Скала 2.11

Хотя дальнейшие выпуски 2.11.x остаются возможными, они не планируются, поэтому мы (команда Scala в Lightbend) больше не публикуем ночные выпуски 2.11.

person Seth Tisue    schedule 16.11.2016
comment
См. также github.com/typelevel/scala/issues/135 ... для поддержки плагины компилятора, которые вы захотите использовать CrossVersion.patch, и пока вы это делаете, вы также можете использовать scalaOrganization.value, чтобы получить совместимость со Scala на уровне типов. - person Miles Sabin; 09.03.2017
comment
Если вы обнаружите, что хотите делать это часто, также можно условно добавить дополнительный преобразователь в вашу глобальную конфигурацию SBT (например, gist.github.com/retrony/61bfa9585a303cdaa204b5916124bf0c) - person retronym; 05.06.2017
comment
Если вы получаете сообщение об ошибке, например org.scala-js#scalajs-compiler_2.12.8-bin-ebf8017;0.6.25: not found, одно из решений (которое сработало для меня): libraryDependencies := libraryDependencies.value.filterNot(_.name == "scalajs-compiler"), addCompilerPlugin("org.scala-js" % "scalajs-compiler_2.12.7" % "0.6.25"), - person Dale Wijnand; 24.10.2018
comment
Я также иногда прибегал к простому редактированию определения сборки и замене "foolib" %% "1.2.3" на "foolib_2.12.7" % "1.2.3", это дает все, что опубликовано в полной версии Scala, обычно плагины компилятора (Scala.js, макрорай и т. д.) - person Seth Tisue; 25.10.2018