【问题标题】:How do I tell sbt or scala-cli to use a nightly build of Scala 2.12 or 2.13?如何告诉 sbt 或 scala-cli 使用 Scala 2.12 或 2.13 的夜间构建?
【发布时间】:2017-03-30 02:31:26
【问题描述】:

我想根据最新的 Scala 2 nightlies 测试我的代码。

answer for Scala 2.10 不再起作用了。

我该怎么办?

【问题讨论】:

    标签: scala sbt nightly-build


    【解决方案1】:

    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.162.13.9;无论哪种情况,它都是该分支上下一个版本的版本号

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

    快速版本(scala-cli)

    在 scala-cli 0.1.2 或更高版本上,您可以通过以下方式获得 2.13 nightly:

    scala-cli repl -S 2.nightly
    

    如果您想要每晚最新的 2.12,您必须自己提供版本号(请参阅上面有关如何确定它的说明)并指定解析器:

    scala-cli repl -S 2.12.16-bin-abcd123 \
      --repository https://scala-ci.typesafe.com/artifactory/scala-integration
    

    当然,不仅repl 有效,其他 scala-cli 子命令也有效。

    更长的解释

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

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

    过去基于 Jenkins 的旧答案不再适用,因为我们(在 2018 年)将 nightlies 的发布从 Jenkins 转移到 Travis-CI。

    要告诉 sbt 使用其中一个 nightlies,你需要做三件事。

    首先,添加保存 nightlies 的解析器:

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

    其次,指定Scala版本:

    scalaVersion := "2.13.1-bin-abcd123"
    

    但这不是真正的版本号。手动替换包含 scala/scala repository 中最后一次提交的 7 字符 SHA 的版本号,为此发布了夜间构建。查看https://travis-ci.org/scala/scala/branches,您会在 2.13.x(或 2.12.x)部分的右上角看到 SHA。例如:

    2.13.1一出,nightly里的版本号就会涨到2.13.2,以此类推。

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

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

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

    斯卡拉 2.11

    没有进一步发布 2.11.x 的计划,因此我们(Lightbend 的 Scala 团队)也不再发布 2.11 nightlies。

    【讨论】:

    • 另见 github.com/typelevel/scala/issues/135 ... 以支持编译器插件,您需要使用 CrossVersion.patch,当您使用它时,您不妨使用 scalaOrganization.value 来获得 Typelevel Scala 兼容性也是。
    • 如果你发现你想经常这样做,也可以有条件地在你的全局 SBT 配置中添加额外的解析器(例如gist.github.com/retronym/61bfa9585a303cdaa204b5916124bf0c
    • 如果您收到类似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"),
    • 我有时也只编辑构建定义并将"foolib" %% "1.2.3"替换为"foolib_2.12.7" % "1.2.3",这会产生由完整Scala版本发布的任何内容,通常是编译器插件(Scala.js,宏天堂等)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2021-06-21
    • 1970-01-01
    • 2021-07-09
    • 2018-01-13
    • 2021-11-18
    • 2011-05-25
    相关资源
    最近更新 更多