我正在尝试使用SBT的配置将相关性范围限定在同一个项目中的模块。模块间依赖关系取决于SBT中可能的配置?
在生产中,此类依赖关系由类路径上的jar满足,但在dev中,执行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
将取决于DevConfigA模块,而不取决于DevConfigB。
我不得不将configs
和dependsOn
从呼叫移到Project.apply
才能编译它。之后,DevConfig*
依赖关系不会显示出来,当我server/config-a:run
或如果我打电话show server/config-a:dependency-classpath
。
有没有办法使模块间的依赖依赖于配置?
无论如何做到这一点与模块依赖关系,而不是librarydependences?在我的例子中,DevConfigA和DevConfigB是其他子模块。 – EvilRyry
您能否在您的问题中添加子模块的定义?当你使用'DevConfigA%configA'时,它意味着'compile-> configA',这意味着来自'DevConfigA'的编译范围库最终成为'configA'范围的库。这是你在追求什么? –