gpt4 book ai didi

scala - 用SBT 0.13中的.sbt文件编写多项目构建的惯用方式

转载 作者:行者123 更新时间:2023-12-05 00:40:12 29 4
gpt4 key购买 nike

我听说.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文件放入各自的子目录中,使它们之间的一些通用代码共享,然后为聚集子项目的整个项目提供root build.sbt?我现在在.scala文件中有一个类似的设置,但是如果可能的话,我希望使用.sbt文件。

如果这不可能,用.sbt文件构造大型多项目构建的“正确”方法是什么?

最佳答案

在0.12中已经可以将.sbt文件放在子项目的基本目录中,并且那里的设置将包含在该项目的范围中。

通过在.sbt中创建普通的.scala文件,可以在project/文件之间重用代码。 project/中的代码将可在.sbt文件中使用。至少在0.13中,一个.sbt中的定义对其他.sbt文件不可见。这主要是一个实现限制,并且不确定在将来的版本中是否会取消。

默认的根项目将聚集所有子项目,包括那些来自subProject/build.sbt中定义的项目的子项目。

当前的困难是使其变得明确。
例如,根目录中的以下build.sbt将在sub/中定义一个子项目。
这是一个完整的定义,定义项目的ID,基本目录等。
<root>/build.sbt

lazy val sub = project

但是,它不能引用 <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

但是,这重复了 sub的定义。

可能的解决方案是使根定义只是一个引用,例如:
<root>/build.sbt
lazy val sub = LocalProject("sub")

关于scala - 用SBT 0.13中的.sbt文件编写多项目构建的惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17858413/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com