使用buildsbt。我正在尝试做这样的事情:
if (condition) {
libraryDependencies += ... // library from maven
}
else {
unmanagedJars in Compile += ... // local library instead
}
但是,build.sbt完全不喜欢这个。我已经能够使用副作用来实现这一点,但这显然是不可取的。任何意见,将不胜感激。谢谢。
答案 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