2013-10-13 84 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構建腳本將失敗。

相關問題