我开始使用我一直在研究的单个Play Framework 2.x项目(Scala)。
现在已经达到了这样的程度,我想将项目分解为一些子项目和“兄弟项目”。具体来说 - 我正在编写一个Play REST API服务,我希望也为该服务构建一个Javascript项目,就像'SDK'一样。
我认为'使用SBT这是可能的 - 但是我被困住了,这方面的文件似乎很薄。
我想在一个'main'项目下面有三个项目,它们只是其他三个项目的容器,主要构建文件的位置。
这就像是:
当我尝试运行'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?)。
答案 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
构建脚本将失败。