SBT子项目不起作用?

时间:2014-11-23 11:57:43

标签: scala sbt

我有一个看起来像这样的构建

thing/ build.sbt clientserver/ build.sbt client/ ... server/ ...

//build.sbt val clientserver = project.in(file("clientserver"))...

//clientserver/build.sbt val client = project.in(file("client"))... val server = project.in(file("server"))...

如何在SBT控制台中引用这些子项目? clientserver/client/compileclientserver.client/compile不起作用

2 个答案:

答案 0 :(得分:1)

必须在顶级构建中定义所有项目定义。但是,您可以拥有基本目录深度为2级的项目。

因此,对于您的示例,您应该在thing/build.sbt中使用以下内容:

lazy val clientserver = project.in(file("clientserver"))...

lazy val clientserverClient = project.in(file("clientserver/client"))...
lazy val clientserverServer = project.in(file("clientserver/server"))...

在sbt控制台中,它们分别被称为clientserverClientclientserverServer

答案 1 :(得分:0)

你如何使用sbt?是什么意思,通过IDE或命令行?我在IntelliJ中遇到了多模块项目的问题,但最近的更新解决了我的问题。

更新包括IntelliJ本身(从13.3到14.0)和scala-plugin到1.1版本。

当我以前从非IDE运行我的项目时,一切顺利,但当我切换到IntelliJ时,它是自动创建模块scala facets以及是什么使它无法编译。第二个问题是文件夹名称包含空格char - UriException。这两个更新都解决了问题。

你可以检查它是否可以从cmd行运行?如果是这样,你能否将所有子模块定义放到' thing / build.sbt'尝试一下?我将我的项目定义为下面的片段,但是在Scala对象中(扩展了构建特征),它就像魅力一样。

lazy val root = Project(
    id = "root",
    file ("."),
    settings = buildSettings
              ++ Seq (description := "root")
              ++ Seq (libraryDependencies ++= commonDependencies)
    ) aggregate core

lazy val core = Project(
    id = "Core",
    base = file ("Core module"),
    settings = buildSettings
              ++ Seq (description := "Core desc")
              ++ Seq (libraryDependencies ++= commonDependencies)
    )