基于scalaVersion的条件addSbtPlugin

时间:2015-04-23 06:52:38

标签: sbt

我使用的插件(sbt-scapegoat)仅适用于Scala 2.11。

我可以使用基于scalaVersion的条件addSbtPlugin吗?像:

if (scalaVersion.value.startsWith("2.11")) addSbtPlugin("com.sksamuel.scapegoat" %% "sbt-scapegoat" % "0.94.6")

如何在SBT中执行此操作?

建始

2 个答案:

答案 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)