我听说.sbt文件在0.13中已经以各种方式得到了改进,现在我可以在其中指定多项目构建.
http://www.scala-sbt.org/0.13.0/docs/Community/ChangeSummary_0.13.0.html#sbt-format-enhancements提到我们现在可以在.sbt文件中定义子项目.我也知道根目录中的多个.sbt文件将聚合到一个概念文件中.
但是,我真正喜欢的是不要用十几个子项目.sbt文件污染我的根.有没有办法可以将子项目build.sbt文件放到各自的子目录中,在它们共享的地方保留一些公共代码,然后为整个项目聚合子项目的根build.sbt?我现在在.scala文件中有类似的设置,但如果可能的话,我更愿意使用.sbt文件.
如果这不可能,使用.sbt文件构建大型多项目构建的"正确"方法是什么?
Mar*_*rah 23
在0.12中应该已经可以将.sbt文件放在子项目的基本目录中,并且那里的设置将包含在该项目的范围内.
.sbt通过在中创建普通.scala文件,可以在文件之间重用代码project/.代码project/将可用于.sbt文件.一个.sbt中的定义对其他.sbt文件不可见,至少在0.13中.这主要是一个实施限制,未来版本是否会解除这个问题尚未确定.
默认根项目将聚合所有子项目,包括来自中定义的项目的子项目subProject/build.sbt.
目前的困难是明确表达.例如,build.sbt根目录中的以下内容将定义子项目sub/.这是一个完整的定义,定义项目的ID,基目录等.
<root>/build.sbt
lazy val sub = project
Run Code Online (Sandbox Code Playgroud)
但是,它无法引用任何定义的内容<sub>/build.sbt.(sub/build.sbt直到<root>/build.sbt编译和评估之后才知道它的存在.)因此,要明确定义sub聚合,你需要类似的东西:
sub/build.sbt
lazy val sub = project.in(file(".")).aggregates(subSub)
//or: lazy val sub = project in file(".") aggregate subSub
lazy val subSub = project
Run Code Online (Sandbox Code Playgroud)
但是,这复制了定义sub.
未来可能的解决方案是将根定义仅作为参考,例如:
<root>/build.sbt
lazy val sub = LocalProject("sub")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6608 次 |
| 最近记录: |