我一直在使用这些文档:https://www.playframework.com/documentation/2.4.x/SBTSubProjects并在主模块和子模块中拆分了一个大项目。
大约7000个编译器错误,大量的咖啡因和整个“哇 - 希望我之前知道”,之后我让项目再次使用它的新模块化布局。
现在我要创建第二个子模块。
让我们调用主模块ROOT,我们可以子模块A ModA和子模块B ModB。
ROOT将取决于ModA和ModB
ModA不会依赖任何东西
ModB将取决于ModA
让ModA和ModB成为兄弟姐妹会更优雅(阅读:可维护)还是模式优雅,以便有一系列子模块来指示继承流?
ROOT - > ModB - > ModA
如果(当)我们添加ModC和ModD等,这将变得混乱(ier)所以我希望我们可以用兄弟的模型做到这一点。
我相信大多数魔法出现在这里:
lazy val moduleA = (project in file("modules/ModA")).enablePlugins(PlayScala)
lazy val ROOT = (project in file("."))
.enablePlugins(PlayScala).dependsOn(ModA).aggregate(ModA)
我会假设我可以链接dependsOn
和aggregate
来电。
lazy val moduleA = (project in file("modules/ModA")).enablePlugins(PlayScala)
lazy val moduleB = (project in file("modules/ModB")).enablePlugins(PlayScala)
lazy val ROOT = (project in file("."))
.enablePlugins(PlayScala).dependsOn(ModA)
.aggregate(ModA).dependsOn(ModB).aggregate(ModB)
使用兄弟姐妹模型如何声明ModB对ModA的依赖性? (假设在modB的build.sbt中)
lazy val moduleA = (project in file("modules/ModA")).enablePlugins(PlayScala)
lazy val ROOT = (project in file("."))
.enablePlugins(PlayScala).dependsOn(ModA).aggregate(ModA)
答案 0 :(得分:1)
这应该可以正常工作:
lazy val moduleA = (project in file("modules/ModA")).enablePlugins(PlayScala)
lazy val moduleB = (project in file("modules/ModB")).enablePlugins(PlayScala).dependsOn(moduleB)
lazy val ROOT = (project in file("."))
.enablePlugins(PlayScala).dependsOn(moduleB)
它将过渡依赖于模式A.另请注意,dependsOn和aggregate应该引用lazy val的名称,而不是文件夹名称。
在这种情况下,我认为你实际上不需要聚合,因为你有依赖关系。这是一个包含聚合和多个依赖关系的更复杂的示例:
lazy val moduleA = (project in file("modules/ModA")).enablePlugins(PlayScala)
lazy val moduleC = (project in file("modules/ModC")).enablePlugins(PlayScala)
lazy val moduleB = (project in file("modules/ModB")).enablePlugins(PlayScala).dependsOn(moduleB)
lazy val myapp = (project in file("myapp")).enablePlugins(PlayScala).dependsOn(moduleB, moduleC)
lazy val batch = (project in file("batch")).enablePlugins(PlayScala).dependsOn(moduleB)
lazy val ROOT = (project in file("."))
.aggregate(myapp, batch)
这样toplevel(root)实际上没有代码而且不依赖于任何人,它只是汇总了你的webapp和它的伴随批量,它们都依赖于ModB,它本身依赖于ModA