Play Framework [2.4.x] 使用子模块
Play Framework [2.4.x] Working with Sub Modules
我一直在使用这些文档:https://www.playframework.com/documentation/2.4.x/SBTSubProjects 并将一个大项目拆分为一个主模块和一个子模块。
大约 7000 个编译器错误,大量咖啡因和整个 "wow -- wish I knew that before" 之后我让项目再次使用它的新模块化布局。
现在我想创建第二个子模块。
让我们调用主模块ROOT,我们可以子模块A ModA和子模块B ModB。
ROOT 将取决于 ModA 和 ModB
ModA 不会依赖于任何东西
ModB 将取决于 ModA
让 ModA 和 ModB 成为兄弟姐妹会更优雅(读作:可维护),还是让子模块链指示继承流程更优雅?
ROOT -> ModB -> ModA
如果(当)我们添加 ModC 和 ModD 等,这将变得更糟,所以我希望我们可以用兄弟姐妹的模型来做到这一点。
我相信大多数魔法都出现在这里:
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)
这应该可以正常工作:
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)
它会传递依赖于 mod A. 还要注意 dependsOn 和 aggregate 应该引用惰性 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)
这样顶层(root)实际上没有代码,也不依赖于任何人,它只是聚合了你的 webapp 和它的配套批次,它们都依赖于 ModB,而 ModB 本身又依赖于 ModA
我一直在使用这些文档:https://www.playframework.com/documentation/2.4.x/SBTSubProjects 并将一个大项目拆分为一个主模块和一个子模块。
大约 7000 个编译器错误,大量咖啡因和整个 "wow -- wish I knew that before" 之后我让项目再次使用它的新模块化布局。
现在我想创建第二个子模块。
让我们调用主模块ROOT,我们可以子模块A ModA和子模块B ModB。
ROOT 将取决于 ModA 和 ModB
ModA 不会依赖于任何东西
ModB 将取决于 ModA
让 ModA 和 ModB 成为兄弟姐妹会更优雅(读作:可维护),还是让子模块链指示继承流程更优雅?
ROOT -> ModB -> ModA
如果(当)我们添加 ModC 和 ModD 等,这将变得更糟,所以我希望我们可以用兄弟姐妹的模型来做到这一点。
我相信大多数魔法都出现在这里:
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)
这应该可以正常工作:
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)
它会传递依赖于 mod A. 还要注意 dependsOn 和 aggregate 应该引用惰性 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)
这样顶层(root)实际上没有代码,也不依赖于任何人,它只是聚合了你的 webapp 和它的配套批次,它们都依赖于 ModB,而 ModB 本身又依赖于 ModA