Play Framework [2.4.x]使用子模块

时间:2015-07-29 13:34:25

标签: playframework-2.0 sbt git-submodules

我一直在使用这些文档: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)

我会假设我可以链接dependsOnaggregate来电。

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)

1 个答案:

答案 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