SBT中是否可能存在依赖于配置的模块间依赖关系?
我正试图使用SBT的配置来确定同一项目中模块的依赖关系 在生产环境中,类路径上的jar可以满足此依赖关系,但在开发过程中,最好执行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
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
作用域库。这就是你想要的吗?