Scala 将sbt多模块项目拆分为生成文件

Scala 将sbt多模块项目拆分为生成文件,scala,sbt,Scala,Sbt,我有一个多模块sbt项目,基本结构如下: - ProjectX -- project/ProjectXBuild.scala -- moduleA -- moduleB -- moduleC ... object ProjectXBuild extends Build { lazy val root: Project = Propject( .... ) aggregate(moduleA, moduleB, moduleC) lazy val moduleA: Proj

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

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

  lazy val moduleA: Project = Project(.....)
  lazy val moduleB: Project = Project(.....)
  ...
现在,project/ProjectXBuild.scala将所有项目定义如下:

 - ProjectX
 -- project/ProjectXBuild.scala
 -- moduleA
 -- moduleB
 -- moduleC
 ...
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对象变得越来越大

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

我尝试使用sbt的递归特性来改变这一点,并在ProjectX/project/project/build.sbt文件中的类路径中附加一个project/modules目录,但我想我可能误解了项目/项目的目的,或者我做得不对

总而言之,是否可以从project/MassiveBuildFile.scala提取“素材”,例如project/a/modulebuild.scala和project/b/modulebuild.scala等


谢谢你的提示。我试着在github上查看各种项目,但即使是大量的scala代码,这似乎有点让我无法接受。

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


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

好的,这一点在

所有源只需位于project/src/main/scala中即可