拆分sbt多模块项目scala构建文件

时间:2014-09-16 07:28:03

标签: scala sbt

我有一个多模块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的递归特性更改它,并将project / modules目录附加到ProjectX / project / project / build.sbt文件中的类路径,但我想我或者误解了项目/项目目的或者我做了它错。

总结一下,是否有可能从project / MassiveBuildFile.scala中提取“stuff”到例如project / a / ModuleABuild.scala和project / b / ModuleBBuild.scala等?

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

好的,这已在

中得到解答

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

所有来源只需要在project / src / main / scala