【问题标题】:Use sbt-projectmatrix to create AutoPlugin. How to set scalaVersion?使用 sbt-projectmatrix 创建 AutoPlugin。如何设置scalaVersion?
【发布时间】:2021-11-20 04:11:42
【问题描述】:

我使用 sbt-projectmatrix 创建了 2 个带有 customRow 的 sbt 插件:

case class MatrixAxis(
  idSuffix: String,
  directorySuffix: String
) extends VirtualAxis.WeakAxis

// sbt
val oss = MatrixAxis("-oss", "oss")
val priv = MatrixAxis("-priv", "priv")
val scalaV = ???
lazy val devops = projectMatrix
  .enablePlugins(SbtPlugin)
  .settings(
    pluginCrossBuild / sbtVersion := "1.3.13", // minimum sbt version
  ).customRow(
    scalaVersions = Seq(scalaV),
    axisValues = Seq(priv, VirtualAxis.jvm),
    _.settings(...)
  .customRow(
    scalaVersions = Seq(scalaV),
    axisValues = Seq(oss, VirtualAxis.jvm),
    _.settings(...)

sbt's guide,他们说:

sbt 插件必须使用 sbt 本身编译的 Scala 2.12.x 进行编译。通过不指定 scalaVersion,sbt 将默认为适合插件的 Scala 版本。

但我不知道如何在不设置 scalaVersions 的情况下创建 customRow?

(如果我设置scalaVersions = Nil 那么projectMatrix 不会为我创建任何项目)

【问题讨论】:

    标签: scala plugins sbt


    【解决方案1】:

    sbt-projectmatrix 需要静态知道 Scala 版本,因为它使用它来构建项目的 ID。所以不幸的是,在scalaVersions 参数中,我们无法读取scalaVersion.value 的值来知道sbt 默认会选择什么。

    我们能做的就是稍微作弊:首先,使用任何硬编码的 2.12.x 版本(例如 2.12.1)写入scalaVersions。然后,显式覆盖 scalaVersion := ...,绕过 sbt-projectmatrix 将设置的 2.12.1:

    val oss = MatrixAxis("-oss", "oss")
    val priv = MatrixAxis("-priv", "priv")
    val scalaV = "2.12.1" // arbitrary 2.12.x version
    lazy val devops = projectMatrix
      .enablePlugins(SbtPlugin)
      .settings(
        pluginCrossBuild / sbtVersion := "1.3.13", // minimum sbt version
        /* override with the default scalaVersion in the Global scope,
         * which is sbt's choice, not impacted by sbt-projectmatrix
         */
        scalaVersion := (Global / scalaVersion).value,
      ).customRow(
        scalaVersions = Seq(scalaV),
        axisValues = Seq(priv, VirtualAxis.jvm),
        _.settings()
      )
      .customRow(
        scalaVersions = Seq(scalaV),
        axisValues = Seq(oss, VirtualAxis.jvm),
        _.settings()
      )
    

    【讨论】:

      猜你喜欢
      • 2018-04-09
      • 2014-12-16
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 2013-12-09
      • 2013-09-15
      • 2014-10-15
      相关资源
      最近更新 更多