SBT中是否可能存在依赖于配置的模块间依赖关系?

SBT中是否可能存在依赖于配置的模块间依赖关系?,sbt,Sbt,我正试图使用SBT的配置来确定同一项目中模块的依赖关系 在生产环境中,类路径上的jar可以满足此依赖关系,但在开发过程中,最好执行server/config-a:run或server/config-b:run手动选择依赖关系 目前,我有这样的想法: lazy val configA = config("config-a") extend Runtime lazy val configB = config("config-b") extend Runtime lazy val DevConfig

我正试图使用SBT的配置来确定同一项目中模块的依赖关系

在生产环境中,类路径上的jar可以满足此依赖关系,但在开发过程中,最好执行
server/config-a:run
server/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
将依赖于devconfig模块,而不是devconfig-gb

我不得不将
configs
dependsOn
移出对
项目的调用。应用
以使其编译。在这之后,当我调用
server/config-a:run
或调用
show server/config-a:dependency类路径时,
DevConfig*
依赖项不会显示


有没有办法使模块间依赖项依赖于配置?

是的,有办法使依赖项依赖于配置-使用
库依赖项
配置范围

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

[server]> show sbtVersion
[info] 0.13.1
假设您需要不同版本的库,例如scalaz,具体取决于您执行
运行
的配置。事实上,您不必担心这个任务,但是给定配置中可用的依赖项,而且由于
libraryDependencies
驱动它,我将使用它

[server]> help libraryDependencies
Declares managed dependencies.
下面是
build.sbt
,它提供了您想要的东西

构建.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)

是否要使用模块依赖项而不是库依赖项来执行此操作?在我的示例中,DevConfigA和DevConfigB是其他子模块。能否在问题中添加子模块的定义?使用
devconfig%configA
意味着
compile->configA
这反过来意味着
compile
devconfig
configA
的作用域库最终成为
configA
作用域库。这就是你想要的吗?