模块间的依赖关系取决于SBT中可能的配置?

时间:2014-02-11 22:54:31

标签: sbt

我正在尝试使用SBT的配置将依赖关系范围扩展到同一项目中的模块。

在生产中,类路径上的jar会满足此依赖关系,但在开发期间,最好是server/config-a:runserver/config-b:run手动选择依赖项。

目前,我有这样的事情:

lazy val configA = config("config-a") extend Runtime
lazy val configB = config("config-b") extend Runtime

lazy val DevConfigA = Project(id = "dev-config-a", base = file("dev-config-a"))
lazy val DevConfigB = Project(id = "dev-config-b", base = file("dev-config-b"))

lazy val server = Project(id = "server",
                          base = file("server"),
                          dependencies = Seq(common))
                      .configs(configA, configB)
                      .dependsOn(DevConfigA % configA, DevConfigB % configB)

DevConfigA和DevConfigB引入用于配置的资源。我们想要加载其中一个。目标是server/config-a:run依赖于DevConfigA模块,而不是DevConfigB。

我必须将configsdependsOn移出Project.apply调用才能进行编译。之后,当DevConfig*或我致电server/config-a:run时,show server/config-a:dependency-classpath依赖关系未显示。

是否有办法使模块间依赖依赖于配置?

1 个答案:

答案 0 :(得分:0)

是的,有一种方法可以使依赖项依赖于配置 - 使用libraryDependencies config-scoped。

我正在使用SBT的最新稳定版本。

[server]> show sbtVersion
[info] 0.13.1

假设您需要不同版本的库,例如scalaz,基于您执行run的配置。事实上,您不必担心任务,而是在给定配置中可用的依赖项,并且由于libraryDependencies驱动它,我将使用它。

[server]> help libraryDependencies
Declares managed dependencies.

这是提供您想要的build.sbt

<强> build.sbt

lazy val configA = config("config-a") extend Runtime

lazy val configB = config("config-b") extend Runtime

lazy val server = project in file(".") configs(configA, configB)

val scalaz705    = "org.scalaz" %% "scalaz-core" % "7.0.5"
val scalaz710_M5 = "org.scalaz" %% "scalaz-core" % "7.1.0-M5"

libraryDependencies in configA += scalaz705

libraryDependencies in configB += scalaz710_M5

通过以上build.sbt sbt,我们可以根据配置选择不同版本的Scalaz。

[server]> show libraryDependencies
[info] List(org.scala-lang:scala-library:2.10.3)
[server]> show config-a:libraryDependencies
[info] List(org.scala-lang:scala-library:2.10.3, org.scalaz:scalaz-core:7.0.5)
[server]> show config-b:libraryDependencies
[info] List(org.scala-lang:scala-library:2.10.3, org.scalaz:scalaz-core:7.1.0-M5)