【发布时间】:2018-03-12 08:36:24
【问题描述】:
在 SBT 多项目中,主 Web App 依赖于一些子项目。 当我在考虑 Stubbed 模型时,我想让 stubbed 模型实现成为一个单独的子项目。
问题:SBT 项目依赖项是在 SBT 中预定义的。我无法通过命令行使其动态依赖于一个或其他子项目。
这意味着,我不能有一个“发布构建”来使 web 应用程序只依赖于一个真正实现的模块,或者一个“存根构建”来使 web 应用程序只依赖于同一项目树中的存根模块。
分离依赖关系的想法是:我不希望产品发布战争包含存根 jar。存根 jar 应该只在测试环境中可用。
问题:我可以使用命令行参数告诉SBT要依赖哪个子项目吗?
在正常的jetty:start启动项目时,它的主项目应该依赖于常规的子项目。如果我使用“-Stub = true”之类的命令行启动 SBT,那么我希望主项目将依赖项更改为存根子项目。由于给定时间,它应该在存根模型或常规存根模型中,编译器应该有机会更新依赖关系。是否可以在 SBT 中做到这一点?
这是一个示例项目:
lazy val DataTier = Project(
id = "dataTier",
base = file("dataTier"))
}
lazy val StubbedDataTier = Project(
id = "stubbeddataTier",
base = file("stubbeddataTier"))
}
lazy val webApp = Project(
"tiny-web",
file("."))
.aggregate(
DataTier,
StubbedDataTier
)
.dependsOn(
if (getCmdLineArg("Stub") == "true") StubbedDataTier else DataTier
)
在运行 SBT 时,我们可以做 stubbed 模型:
./sbt ~jetty:start -Stub = true
或在常规模型中
./sbt ~jetty:start
如果SBT不支持,是否可以像这样成为SBT的新功能?
.dependsOn(
if (getCmdLineArg("Stub") == "true") StubbedDataTier else DataTier
)
【问题讨论】:
标签: dependencies sbt projects