gpt4 book ai didi

scala - 如何指定必须先构建另一个项目 B 才能构建项目 A?

转载 作者:行者123 更新时间:2023-12-04 00:31:59 24 4
gpt4 key购买 nike

假设我公司的一个人有一个名为 commons 的 sbt 项目。这是非常通用的。这个项目是用传统的 sbt 方式定义的:在主文件夹中,构建定义在 project/Build.scala 中。文件。

现在其他人正在开发一个名为 databinding 的项目。这取决于 commons .我们想以同样的方式定义这个项目,用 project/Build.scala .

我们有以下目录布局:

dev/
commons/
src/
*.scala files here...
project/
Build.scala
databinding/
src/
*.scala files here...
project/
Build.scala

我如何指定 databinding需要 commons首先构建并使用输出类文件?

我读了 Multi-project builds ,并为 databinding 的构建定义提出了以下内容:
object MyBuild extends Build {

lazy val root = Project(id = "databinding", base = file(".")) settings (
// ... omitted
) dependsOn (commons)

lazy val common = Project(id = "commons",
base = file("../commons")
)

}

除了它不起作用:sbt 不喜欢 ..并抛出一个断言错误。显然, commons应该是 databinding 里面的文件夹.但是这两个项目保存在单独的 git 存储库中,我们不能嵌套。

如何正确指定此依赖项?

最佳答案

您需要在根项目中定义多项目(或任何名称,但这个名称很合适)将在 dev/project/Build.scala 中定义。 .

object RootBuild extends Build {
lazy val root = Project(id = "root", base = file("."))
.settings(...)
.aggregate(commons, databinding)

lazy val commons = Project(id = "commons", base = file("commons"))
.settings(...)

lazy val databinding = Project(id = "databinding", base = file("databinding"))
.settings(...)
.dependsOn(commons)
}

还有一件事,SBT 不支持 *.scala子项目中的配置文件。这意味着您必须迁移您在 commons/project/Build.scala 上所做的配置。和 databinding/project/Build.scala分别进入 commons/build.sbtdatabinding/build.sbt .

如果您的某些配置不适合 .sbt定义文件,您必须将它们添加到根 project/Build.scala .显然,在 root Build.scala 中定义的设置可在 *.sbt 购买文件。

关于scala - 如何指定必须先构建另一个项目 B 才能构建项目 A?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8330149/

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