2013-10-13 57 views
0

我已经开始使用我一直在研究的单个Play Framework 2.x项目(Scala)。使用子项目播放框架项目,如何使SBT正常工作

这现在已经达到了我想将项目分解成多个子项目和'sibiling'项目的程度。具体来说 - 我正在编写一个Play REST API服务,我希望还可以为这个服务创建一个Javascript项目,就像一个'SDK'一样。

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

我想在一个“主”项目下有三个项目,这个项目只不过是其他三个项目的容器,而主构建文件就是这样。

这将是这样的:

  • 主要
    • 服务(播放+斯卡拉)
      • 共同文件(斯卡拉只)
    • 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?)。

回答

0

我觉得你的基地项目应该是这样的:

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

首先,项目是通过声明Projectlazy val,因为你可能会遇到初始化问题定义。

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

如果您已经安装和配置SBT SBT类路径,尝试在终端sbt命令。当前项目应该自动设置为“基本”。

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

相关问题