我使用的插件(sbt-scapegoat)仅适用于Scala 2.11。
我可以使用基于scalaVersion的条件addSbtPlugin吗?像:
if (scalaVersion.value.startsWith("2.11")) addSbtPlugin("com.sksamuel.scapegoat" %% "sbt-scapegoat" % "0.94.6")
如何在SBT中执行此操作?
建始
答案 0 :(得分:6)
tl; dr 鉴于问题的描述,这是不可能的。
在某个sbt项目中有至少两个构建配置 - 真正的项目(你想赌你的钱)和用于构建项目的元构建。是的,我知道这听起来有点奇怪,但它是一个非常强大的概念恕我直言。
请参阅sbt is recursive:
项目目录是构建中的另一个构建,它知道如何构建构建。为了区分构建,我们有时使用正确构建术语来指代您的构建,并使用元构建来引用项目中的构建。 metabuild中的项目可以执行任何其他项目可以执行的任何操作。您的构建定义是一个sbt项目。
sbt在Scala上运行,需要严格的版本。没办法改变它,除非你喜欢花时间做一些你不应该首先触及的事情:)
您可以做的是在project/plugins.sbt
中应用插件,然后在项目中,根据项目的scalaVersion
选择性地应用插件的设置&# 39;构建不元构建本身。
答案并没有那么复杂,但解释简单的概念对我来说通常不是一件容易的事。与sbt玩得开心!如果使用得当,它会很快收回你的费用。
答案 1 :(得分:1)
2020年更新的答案:您可以在.filter
上使用addSbtPlugin
。
例如,以下工作原理:
val scalafixEnabled = System.getProperty("SCALAFIX", "").trim.nonEmpty
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.9.14").filter(_ => scalafixEnabled)