【问题标题】:Split a sbt multimodule project scala build file拆分 sbt 多模块项目 scala 构建文件
【发布时间】:2014-09-16 19:24:33
【问题描述】:

我有一个多模块sbt项目,基本结构如下:

 - ProjectX
 -- project/ProjectXBuild.scala
 -- moduleA
 -- moduleB
 -- moduleC
 ...

现在 project/ProjectXBuild.scala 的所有项目定义如下:

object ProjectXBuild extends Build {
  lazy val root: Project = Propject( .... ) aggregate(moduleA, moduleB, moduleC)

  lazy val moduleA: Project = Project(.....)
  lazy val moduleB: Project = Project(.....)
  ...

我想做的是将 val 的 moduleA 和 moduleB 移动到单独的文件中,因为 ProjectXBuild 对象变得越来越大。

我可以将它们提取到 ModuleABuild.scala 到 ProjectX/project 目录中。但我想将它们移到一个单独的包中,例如ProjectX/项目/模块。这不起作用,似乎 sbt 的编译类路径上没有任何项目/子目录。

我尝试使用 sbt 的递归特性并将项目/模块目录附加到 ProjectX/project/project/build.sbt 文件中的类路径中来改变这一点,但我想要么我误解了项目/项目的目的,要么我做到了错了。

总而言之,是否有可能从 project/MassiveBuildFile.scala 中提取“东西”到例如project/a/ModuleABuild.scala 和 project/b/ModuleBBuild.scala 等?

感谢您的任何提示。我尝试在 github 上查看各种项目,但即使 https://github.com/sbt/sbt/blob/0.13/project/Sbt.scala 也是一大堆 scala 代码,这对我来说似乎有点无法接受。

【问题讨论】:

标签: scala sbt


【解决方案1】:

您可以做的是将特定于子项目moduleA 的设置放入ProjectX/moduleA/build.sbt(或子项目目录中的任何*.sbt 文件)。您仍然需要在主 *.sbt 或 *.scala 构建文件中列出子项目,但可以在每个子项目的构建文件中定义依赖项等内容。在实践中,所有的构建文件都将被合并以创建一个单独的构建,但设置将正确地作用于每个子项目。

另一方面,在ProjectX/moduleA/project/build.scala 或类似文件中定义设置是不可能的。如果您想在*.scala 文件而不是*.sbt 中定义设置,它们必须进入ProjectX/project/。但是,您可以在项目目录中拥有多个 *.scala 文件,这可能是模块化构建的另一种方式。

【讨论】:

    【解决方案2】:

    好的,这个问题已经在

    中回答了

    How to define directory structure following packages in project's Scala build definitions? 和 Folders/packages in sbt ./project folder

    所有源代码只需要在 project/src/main/scala 中

    【讨论】:

      猜你喜欢
      • 2014-03-19
      • 1970-01-01
      • 2023-04-10
      • 2018-04-26
      • 2013-05-24
      • 1970-01-01
      • 2015-07-21
      • 2016-10-05
      • 2023-03-15
      相关资源
      最近更新 更多