我如何告诉 sbt 或 scala-cli 使用每晚构建的 Scala 2.12 或 2.13?

How do I tell sbt or scala-cli to use a nightly build of Scala 2.12 or 2.13?

我想针对最新的前沿 Scala 2 nightlies 测试我的代码。

answer for Scala 2.10 不再有效。

我该怎么办?

Scala 2.12 或 2.13

快速版 (sbt)

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

对于 2.12 每晚,替换为例如2.12.16 对于 2.13.9;在任何一种情况下,它都是该分支

下一个版本的版本号

对于abcd123,手动替换最新绿色构建的SHA的前7个字符on the 2.13.x or 2.12.x branch on Travis-CI

查找当前 nightly 的完整版本号的一种快速方法是使用 scala-cli,如下所示。

快速版 (scala-cli)

在 scala-cli 0.1.3 或更新版本上,您可以 运行 夜间使用:

scala-cli repl -S 2.12.nightly
scala-cli repl -S 2.13.nightly
scala-cli repl -S 2.nightly     # same as 2.13.nightly
# Scala 3, too!
scala-cli repl -S 3.0.nightly
scala-cli repl -S 3.1.nightly
scala-cli repl -S 3.2.nightly
scala-cli repl -S 3.nightly     # same as 3.2.nightly at present

当然,不仅 repl 有效,所有其他 scala-cli 子命令也有效,例如 compilerun.

更长的解释

Scala 团队不再发布 -SNAPSHOT 个版本的 Scala。 (重新开始可能是社区贡献;参见 this ticket。)

但该团队确实会发布每晚构建的版本,每个版本都有自己的固定版本号。每晚的版本号看起来像例如2.13.1-bin-abcd123。 (-bin- 表示与 sbt 的二进制兼容性;自 2.13.0 以来的所有 2.13.x 版本都相互二进制兼容。)

过去基于 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"

但这不是真正的版本号。在 scala/scala repository for which a nightly build was published. Look at https://travis-ci.org/scala/scala/branches 中手动替换包含最后一次提交的 7 个字符 SHA 的版本号,您将在 2.13.x(或 2.[=81)的右上角看到 SHA =]) 部分。例如:

一发布2.13.1,nightly的版本号就会跳到2.13.2,以此类推。

如果您有一个多项目构建,请确保在修改构建定义时在所有项目中设置这些设置。或者,您可以在 sbt shell 中临时设置它们 ++2.13.1-bin-abcd123 (sbt 0.13.x) 或 ++2.13.1-bin-abcd123! (sbt 1.x;添加的感叹号是必须强制使用未包含在 crossScalaVersions 中的版本。

理想情况下,我们建议采用一种自动方式向 Travis-CI 询问正确的 SHA。这大概可以通过 Travis-CI 的 API 实现,但是(据我所知)还没有人研究过它。 (有义工吗?)

请注意,我们非正式地称这些为“每晚”构建,但从技术上讲这是用词不当。为每个合并的 PR 构建一个所谓的“nightly”。

斯卡拉 2.11

没有进一步的 2.11.x 版本计划,所以我们(Lightbend 的 Scala 团队)也不再发布 2.11 nightlyes。