【发布时间】:2021-12-18 21:56:20
【问题描述】:
我正在尝试为我的build.sbt 脚本上的依赖项和插件设置不同的版本,具体取决于crossCompiled 项目中scalaVersion 的值。
这是我目前所拥有的简化和简化的表示:
scalaVersion := "2.11.12"
crossScalaVersions := Seq("2.11.12", "2.12.14")
val currentDependencies = Def.setting {
scalaVersion.value match {
case "2.11.12" => new {
val circe = "0.12.0-M3"
val kindProjector = "0.10.3"
}
case "2.12.14" => new {
val circe = "0.14.1"
val kindProjector = "0.13.2"
}
}
}
libraryDependencies ++= Seq (
"io.circe" %% "circe-core" % currentDependencies.value.circe
)
addCompilerPlugin(
"org.typelevel" %% "kind-projector" % currentDependencies.value.kindProjector
)
libraryDependencies 部分是正确的,即使不强制添加 .value 部分会更简洁。
理想情况下,我会简单地声明一个Map(scalaV1 -> { dep1 -> v1}, scalaV2 -> { dep1 -> v2} )
但我遇到的问题是关于addCompilerPlugin,因为它没有发生在任务或设置中,我收到以下错误:
error: `value` can only be used within a task or setting macro, such as :=, +=, ++=, Def.task, or Def.setting.
有没有更简洁的方法来实现我想要做的事情?以及如何根据非任务的 scalaVersion 获得正确的依赖版本?
【问题讨论】:
标签: scala sbt cross-compiling