Play框架项目与子项目,如何使SBT正常工作

时间:2013-10-13 17:16:26

标签: scala playframework playframework-2.0 sbt

我开始使用我一直在研究的单个Play Framework 2.x项目(Scala)。

现在已经达到了这样的程度,我想将项目分解为一些子项目和“兄弟项目”。具体来说 - 我正在编写一个Play REST API服务,我希望也为该服务构建一个Javascript项目,就像'SDK'一样。

我认为'使用SBT这是可能的 - 但是我被困住了,这方面的文件似乎很薄。

我想在一个'main'项目下面有三个项目,它们只是其他三个项目的容器,主要构建文件的位置。

这就像是:

    • 服务(play + scala)
      • 常用文件(仅限scala)
    • sdk(javascript)

当我尝试运行'play'来构建我已经得到的层次结构时 - 我得到以下错误的变体:

[error] Not a valid command: play (similar: apply, last, alias)
[error] Not a valid project ID: play
[error] Expected ':' (if selecting a configuration)
[error] Not a valid key: play (similar: playConf, play-conf, playReload)
[error] play
[error]     ^

当我有一个Build.scala(在'main'项目中)看起来像这样:

object ApplicationBuild extends Build {

val appName = "my service"
val appVersion = "1.0-SNAPSHOT"

// tell the couchbase infrastructure to use the built in logger - which will get redirected to our main logger
System.setProperty("net.spy.log.LoggerImpl", "net.spy.memcached.compat.log.SunLogger")

// project dependencies
val appDependencies = Seq(
    ...
    )

val common = Project("common", file("common"))

val service = play.Project(appName, appVersion, appDependencies, path = file("service")).settings(
        scalacOptions ++= Seq("-feature") // turn on normal warnings and feature warnings with scalac
    ).dependsOn(common)

val sdk = Project("sdk", file("sdk"))

val base = Project("base", file("."))
    .dependsOn(service)
    .dependsOn(sdk)
    .dependsOn(common)
}

我得到的文件夹层次是:

\
    \service
    \common
    \sdk
    \project
    \target
    build.sbt

我是否在正确的轨道上并且有人可以帮我解决语法问题,或者我是以完全错误的方式解决问题并且不能像这样使用游戏? (直接使用sbt?)。

2 个答案:

答案 0 :(得分:0)

我认为您的基础项目应如下所示:

val base = Project("base", file("."))
.aggregate(service,sdk,common)

答案 1 :(得分:0)

首先,通过声明lazy val类型Project来定义项目,因为您可能会遇到初始化问题。

lazy val base = Project("base", file(".")).aggregate(sdk, service, common)

如果为SBT安装了SBT并配置了类路径,请在终端中尝试sbt命令。当前项目应自动设置为“基础”。

我建议您尝试sbt命令而不是play命令的原因是:如果根项目不是PlayProject,则play构建脚本将失败。