如何将 sbt-protoc 和 scalapb 与 sbt cross build 集成?
How to integrate sbt-protoc and scalapb with sbt cross build?
我有一个库需要两个不同版本的 "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.
所以我假设顺序是:
- sbt 使用默认的 Scala 版本加载插件配置。
- cross-build 更改 scala 版本
如何将 sbt-protoc
与 sbt cross-build 集成?
目录中的 project
sbt 文件在选择特定的 Scala 版本进行交叉构建之前进行评估。这就是为什么在 project/scalapb.sbt
.
的上下文中传递 ++2.11.12
对 scalaBinaryVersion
没有影响
目前官方不支持在单个构建中使用不同版本的 compilerplugin,但您可以尝试一些解决方法:
- 下载 scalapbc 您想要使用的 ScalaPB 版本。使用 ScalaPBC 编写一个生成源代码的 shell 脚本。将生成的源签入您的代码存储库。手动添加 scalapb-runtime 到你的 libraryDependencies in build.sbt:
libraryDependencies += "com.thesamet.scalapb" %% "scalapb-runtime" % (if (scalaVersion.value == "2.12.10") "0.10.8" else "0.9.7")
对所有 Scala 版本使用 0.9.7。
如果您的情况合理,请考虑放弃对 Scala 2.11 的支持,因为几年前 Scala 2.11 已达到 end-of-life。
我有一个库需要两个不同版本的 "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.
所以我假设顺序是:
- sbt 使用默认的 Scala 版本加载插件配置。
- cross-build 更改 scala 版本
如何将 sbt-protoc
与 sbt cross-build 集成?
目录中的 project
sbt 文件在选择特定的 Scala 版本进行交叉构建之前进行评估。这就是为什么在 project/scalapb.sbt
.
++2.11.12
对 scalaBinaryVersion
没有影响
目前官方不支持在单个构建中使用不同版本的 compilerplugin,但您可以尝试一些解决方法:
- 下载 scalapbc 您想要使用的 ScalaPB 版本。使用 ScalaPBC 编写一个生成源代码的 shell 脚本。将生成的源签入您的代码存储库。手动添加 scalapb-runtime 到你的 libraryDependencies in build.sbt:
libraryDependencies += "com.thesamet.scalapb" %% "scalapb-runtime" % (if (scalaVersion.value == "2.12.10") "0.10.8" else "0.9.7")
对所有 Scala 版本使用 0.9.7。
如果您的情况合理,请考虑放弃对 Scala 2.11 的支持,因为几年前 Scala 2.11 已达到 end-of-life。