如何让sbt解析完整Scala版本?scoverage依赖版本异常排查
问题解答
第一个问题:让sbt解析完整Scala版本(2.13.1)的依赖
sbt的%%语法会自动使用Scala的二进制兼容版本(即major.minor,比如2.13)拼接依赖坐标,这是Scala生态的常规做法——同大版本下的小版本(如2.13.1、2.13.8)二进制兼容,绝大多数库只会发布到二进制版本的坐标下,不会单独为每个小版本发包。
如果一定要强制使用完整的2.13.1版本后缀,需要把%%改成%,手动指定带完整Scala版本的依赖名称:
"org.scoverage" % "scalac-scoverage-plugin_2.13.1" % "2.0.8"
但注意:maven中央仓库中大概率不存在scalac-scoverage-plugin_2.13.1这个包,scoverage官方只会按二进制版本(2.13)发布插件,这种情况下建议接受使用scalac-scoverage-plugin_2.13。
第二个问题:sbt-scoverage 2.0.8自动请求2.0.10版本的scalac插件
这是因为sbt-scoverage插件内部会自动依赖对应的scalac-scoverage-plugin,且插件版本和scalac插件版本存在绑定关系——sbt-scoverage 2.0.8默认会拉取配套的scalac-scoverage-plugin 2.0.10(绑定规则由插件维护者定义)。
要强制指定scalac插件的版本,在build.sbt中添加以下设置覆盖默认值即可:
coveragePluginVersion := "2.0.8"
执行sbt clean coverage test时就会拉取2.0.8版本的scalac-scoverage-plugin,而非2.0.10。
内容的提问来源于stack exchange,提问作者Mr. MonoChrome
相关产品推荐
相关产品推荐

