2

我有以下构建:

  lazy val stampleSearchProject = RootProject(file("../stample-search"))


  lazy val main = play.Project(appName, appVersion, appDependencies)
    .dependsOn(stampleSearchProject)
    .settings(defaultScalaSettings:_*)
    .settings( ......... )

stample-search 项目有一个 build.sbt 文件name := "stample-search"

我在 SBT 文档中发现:

交互式导航项目:在 sbt 交互式提示符下,键入项目以列出您的项目和项目以选择当前项目。当您运行诸如编译之类的任务时,它会在当前项目上运行。所以你不一定要编译根项目,你可以只编译一个子项目。

但是 SBT 文档不使用 RootProject 而是使用 Project 代替(这似乎需要在根项目中使用项目路径,我的意思是我不能使用../my-project

所以我尝试了这个。

[Stample] $ projects
[info] In file:/home/sebastien/Bureau/Stample/stample-web/
[info]   * Stample
[info] In file:/home/sebastien/Bureau/Stample/stample-search/
[info]     default-ccdbaa

所以它似乎列出了两个项目,但我想知道这个名字从哪里来default-ccdbaa

然后我尝试使用项目命令

[Stample] $ project Stample
[info] Set current project to Stample (in build file:/home/sebastien/Bureau/Stample/stample-web/)

[Stample] $ project default-ccdbaa
[error] Invalid project name 'default-ccdbaa' in build file:/home/sebastien/Bureau/Stample/stample-web/ (type 'projects' to list available projects).

[Stample] $ project stample-search
[error] Invalid project name 'stample-search' in build file:/home/sebastien/Bureau/Stample/stample-web/ (type 'projects' to list available projects).

它似乎不起作用。有人可以解释一下我的构建有什么问题吗?

4

1 回答 1

3

有关详细信息,您可能必须阅读完整配置(草稿):项目关系

sbt 中存在三种项目关系。这些由执行、类路径和配置依赖项描述。...

RootProject定义项目引用,而不是子项目。所以你有效地创建了一个源级依赖,但你不能切换到它。更好的方法是使用普通的 Multi-Project build

import sbt._
import Keys._

object HelloBuild extends Build {
  lazy val root = Project(id = "hello",
                          base = file(".")) aggregate(foo, bar)

  lazy val foo = Project(id = "hello-foo",
                         base = file("foo"))

  lazy val bar = Project(id = "hello-bar",
                         base = file("bar"))
}
于 2013-08-23T17:15:12.820 回答