如何在 SBT 中选择性地添加编译器插件
How to optionally add a compiler plugin in SBT
我有一个依赖于 https://github.com/typelevel/kind-projector 的项目,目前针对 scala 2.12 和 2.13 进行交叉编译,我想添加对 scala 3.0 的支持。但是,kind-projector 在 scala 3.0 上不可用,因为它启用的语法是本机 scala 3 语法的一部分。
之前,我使用这个设置来添加编译器插件:
addCompilerPlugin("org.typelevel" % "kind-projector" % "0.11.3" cross CrossVersion.full)
现在,如果 scalaVersion
是 3.0.0,我将尝试禁用该设置。
我得到的最接近的是
Def.setting {
scalaVersion.value match {
case "3.0.0" => new Def.SettingList(Nil)
case _ => Seq(
addCompilerPlugin("org.typelevel" % "kind-projector" % "0.11.3" cross CrossVersion.full)
)
}
}
但类型不正确(这是一个 Initialize
但它需要是一个 Setting
)。
如何根据 scala 版本有条件地禁用编译器插件?
addCompilerPlugin
是 libraryDependencies += compilerPlugin(dependency)
的快捷方式
因此,它应该可以像这样工作
libraryDependencies ++= {
scalaVersion.value match {
case "3.0.0" =>
Nil
case _ =>
List(compilerPlugin("org.typelevel" % "kind-projector" % "0.11.3" cross CrossVersion.full))
}
}
虽然可能有更好的方法。
原始答案无效,因为 scalaVersion.value
在此上下文中不可用:
scalaVersion.value match {
case "3.0.0" =>
new Def.SettingList(Nil)
case _ =>
addCompilerPlugin("org.typelevel" % "kind-projector" % "0.11.3" cross CrossVersion.full)
}
我有一个依赖于 https://github.com/typelevel/kind-projector 的项目,目前针对 scala 2.12 和 2.13 进行交叉编译,我想添加对 scala 3.0 的支持。但是,kind-projector 在 scala 3.0 上不可用,因为它启用的语法是本机 scala 3 语法的一部分。
之前,我使用这个设置来添加编译器插件:
addCompilerPlugin("org.typelevel" % "kind-projector" % "0.11.3" cross CrossVersion.full)
现在,如果 scalaVersion
是 3.0.0,我将尝试禁用该设置。
我得到的最接近的是
Def.setting {
scalaVersion.value match {
case "3.0.0" => new Def.SettingList(Nil)
case _ => Seq(
addCompilerPlugin("org.typelevel" % "kind-projector" % "0.11.3" cross CrossVersion.full)
)
}
}
但类型不正确(这是一个 Initialize
但它需要是一个 Setting
)。
如何根据 scala 版本有条件地禁用编译器插件?
addCompilerPlugin
是 libraryDependencies += compilerPlugin(dependency)
因此,它应该可以像这样工作
libraryDependencies ++= {
scalaVersion.value match {
case "3.0.0" =>
Nil
case _ =>
List(compilerPlugin("org.typelevel" % "kind-projector" % "0.11.3" cross CrossVersion.full))
}
}
虽然可能有更好的方法。
原始答案无效,因为 scalaVersion.value
在此上下文中不可用:
scalaVersion.value match {
case "3.0.0" =>
new Def.SettingList(Nil)
case _ =>
addCompilerPlugin("org.typelevel" % "kind-projector" % "0.11.3" cross CrossVersion.full)
}