build.sbt中的条件库

时间:2015-05-19 23:11:59

标签: sbt

使用buildsbt。我正在尝试做这样的事情:

if (condition) {
  libraryDependencies += ... // library from maven
}
else {
  unmanagedJars in Compile += ... // local library instead
}

但是,build.sbt完全不喜欢这个。我已经能够使用副作用来实现这一点,但这显然是不可取的。任何意见,将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

使用Build.scala构建定义可能更容易。

这是一个示例build.sbt文件(这是可选的):

import sbt._
import sbt.Keys._

libraryDependencies ++= Seq(
   "org.postgresql" % "postgresql" % "9.3-1101-jdbc41",
   "redis.clients" % "jedis" % "2.5.2"
)

然后创建另一个文件your_project_home/project/Build.scala

import sbt._
import Keys._

object BuildSettings {
    val condition = false

    val buildSettings = Defaults.defaultSettings ++ Seq(
        version := "1.0.0",
        if(condition) libraryDependencies ++= Seq("commons-codec" % "commons-codec" % "1.9")
        else unmanagedJars in Compile += file("/tmp/nil")
    )
}

object MyBuild extends Build {
    import BuildSettings._
    lazy val root: Project = Project("root", file("."), settings = buildSettings)
}

您的项目结构应如下所示:

.
├── build.sbt
├── project
│   └── Build.scala
└── target

你可以使“条件”成为你需要的任何东西(这里我只是把它设置为假)。始终包含build.sbt中定义的libraryDependencies。 Build.scala中定义的那些将取决于“条件”。

使用以下命令验证一切是否在命令行中按预期工作:

sbt "inspect libraryDependencies"

答案 1 :(得分:1)

您可以执行以下操作:

val additionalLibraryDependencies = Seq(...)
val additionalUnmanagedJars  = Seq(...)

libraryDependencies ++=(
  if (condition) {
    additionalLibraryDependencies
  }
)

unmanagedJars in Compile ++= (
  if (!condition) {
    additionalUnmanagedJars
  }
)

要从命令行设置条件,您应添加以下行:

val someValueFromCommandLine = System.getProperty("key.of.the.value", "false")
if (someValueFromCommandLine.equals("true")){
    ...
}

您可以像sbt -Dkey.of.the.value=true

一样传递它