0

我有一个库,需要两个不同版本的库,"com.thesamet.scalapb" %% "compilerplugin"具体取决于 Scala 版本。

在我的project/scalapb.sbt我有这个代码:

def scalapbVersion(version:String): String =
  if(version == "2.11") {
    println(s">>>>>>>> Using 0.9.7 to fix 2.11 compat. ${version}")
    "0.9.7"
  } else {
    println(s">>>>>>>> Using last version. ${version}")
    "0.10.2"
  }

libraryDependencies += "com.thesamet.scalapb" %% "compilerplugin" % scalapbVersion(scalaBinaryVersion.value)

执行sbt clean "++2.11.12 compile我得到>>>>>>>> Using lastest version. 2.12但在日志中,我还可以看到交叉构建插件在上一条消息之后将版本更改为 Scala 2.11:

[info] Setting Scala version to 2.11.12 on 13 projects.
[info] Excluded 1 projects, run ++ 2.11.12 -v for more details.

所以我想顺序是:

  1. sbt 使用默认的 Scala 版本加载插件配置。
  2. 交叉构建更改了 scala 版本

如何sbt-protoc与 sbt cross-build 集成?

4

1 回答 1

0

project在选择特定的 scala 版本进行交叉构建之前,会评估目录中的 sbt 文件。这就是为什么++2.11.12scalaBinaryVersion.project/scalapb.sbt

目前官方不支持在单个构建中使用不同版本的编译器插件,但您可以尝试一些解决方法:

  1. 为您想要使用的 ScalaPB 版本下载scalapbc 。编写一个使用 ScalaPBC 生成源的 shell 脚本。将生成的源代码签入您的代码存储库。手动将 scalapb-runtime 添加到 build.sbt 中的 libraryDependencies 中:
libraryDependencies += "com.thesamet.scalapb" %% "scalapb-runtime" % (if (scalaVersion.value == "2.12.10") "0.10.8" else "0.9.7")
  1. 对所有 scala 版本使用 0.9.7。

  2. 如果对您的情况合理,请考虑放弃对 Scala 2.11 的支持,因为几年前 Scala 2.11 已报废。

于 2020-10-22T19:58:21.130 回答