0

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

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

我“认为”使用 SBT 是可能的——但我被困住了,而且该领域的文档似乎很薄。

我想在一个“主”项目下有三个项目,它只不过是其他三个的容器以及主要构建文件所在的位置。

这将是这样的:

  • 主要的
    • 服务(播放 + scala)
      • 通用文件(仅限 scala)
    • sdk (javascript)

当我尝试运行“播放”来构建我所拥有的层次结构时 - 我得到以下错误的变化:

[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 (在“主”项目中)时,如下所示:

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?)。

4

2 回答 2

0

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

val base = Project("base", file("."))
.aggregate(service,sdk,common)
于 2013-10-14T06:05:13.513 回答
0

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

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

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

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

于 2014-01-10T18:18:29.547 回答