如何解决如何将sbt-protoc和scalapb与sbt cross build集成在一起?
我有一个库,根据Scala版本的不同,它们需要两个不同版本的"com.thesamet.scalapb" %% "compilerplugin"
。
在我的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.
所以我想顺序是:
- 具有默认Scala版本的sbt加载插件配置。
- 跨版本更改scala版本
如何将sbt-protoc
与sbt跨版本集成?
解决方法
在
project
目录中的 sbt文件将被评估,然后选择特定的scala版本进行交叉构建。这就是为什么在++2.11.12
的上下文中传递scalaBinaryVersion
对project/scalapb.sbt
无效的原因。
目前尚未正式支持在单个版本中使用不同版本的Compilerplugin,但是您可以尝试以下几种解决方法:
- 下载scalapbc以获取要使用的ScalaPB版本。编写一个使用ScalaPBC生成源代码的shell脚本。将生成的源检入到代码存储库中。手动将scalapb运行时添加到build.sbt中的libraryDependencies中:
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的支持。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。