我有一个多模块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代码,这对我来说似乎有点不可接受。
答案 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
中