【发布时间】:2021-07-13 17:05:18
【问题描述】:
自 Scala 2.13 起,macro-paradise 已内联在编译器中,并可通过编译器标志获得:
Compile / scalacOptions += "-Ymacro-annotations"
作为参考,在之前的 Scala 版本中,macro-paradise 可以通过编译器插件获得:
addCompilerPlugin("org.scalamacros" % "paradise" % "2.1.1" cross CrossVersion.full)
在针对 Scala 2.12 和 2.13 的构建中,根据 Scala 版本的值有条件地添加第一个设置或第二个设置的规范方法是什么?
我想写下面的,但它不起作用:
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((2, n)) if n >= 13 => Compile / scalacOptions += "-Ymacro-annotations"
case _ => addCompilerPlugin("org.scalamacros" % "paradise" % "2.1.1" cross CrossVersion.full)
}
它失败并出现以下错误:
error: `value` can only be used within a task or setting macro, such as :=, +=, ++=, Def.task, or Def.setting.
CrossVersion.partialVersion(scalaVersion.value) match {
^
与此同时,我可以使用以下解决方法,但我希望支持更简单的解决方案:
Compile / scalacOptions ++= {
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((2, n)) if n >= 13 => "-Ymacro-annotations" :: Nil
case _ => Nil
}
}
libraryDependencies ++= {
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((2, n)) if n >= 13 => Nil
case _ => compilerPlugin("org.scalamacros" % "paradise" % "2.1.1" cross CrossVersion.full) :: Nil
}
}
【问题讨论】:
标签: sbt