2013-11-22 73 views
9

我有一個工作的多模塊播放2.2應用程序,它的組織是這樣的...播放子項目:如何轉換到build.sbt

myApp 
    + app 
    + conf 
    + project 
     + build.properties 
     + Build.scala 
     + plugin.sbt 

...其中Build.scala包含以下語句:

import sbt._ 
import Keys._ 
import play.Project._ 

object ApplicationBuild extends Build { 

    val appName   = "myApp" 
    val appVersion  = "1.0-SNAPSHOT" 

    val authDependencies = Seq(
    "se.radley" %% "play-plugins-salat" % "1.3.0" 
) 

    val mainDependencies = Seq(
    "se.radley" %% "play-plugins-salat" % "1.3.0" 
) 

    lazy val auth = play.Project(
    appName + "-auth", 
    appVersion, 
    authDependencies, 
    path = file("modules/auth")).settings(
     lessEntryPoints <<= baseDirectory(customLessEntryPoints), 
     routesImport += "se.radley.plugin.salat.Binders._", 
     templatesImport += "org.bson.types.ObjectId", 
     testOptions in Test := Nil, 
     resolvers ++= Seq(Resolvers.sonatype, Resolvers.scalaSbt) 
    ) 

    lazy val main = play.Project(
    appName, 
    appVersion, 
    mainDependencies).settings(
     scalacOptions += "-language:reflectiveCalls", 
     routesImport += "se.radley.plugin.salat.Binders._", 
     templatesImport += "org.bson.types.ObjectId", 
     testOptions in Test := Nil, 
     lessEntryPoints <<= baseDirectory(customLessEntryPoints), 
     resolvers ++= Seq(Resolvers.sonatype, Resolvers.scalaSbt) 
    ).dependsOn(auth).aggregate(auth) 

    def customLessEntryPoints(base: File): PathFinder = { 
    (base/"app"/"assets"/"stylesheets"/"bootstrap" * "bootstrap.less") +++ 
    (base/"app"/"assets"/"stylesheets" * "*.less") 
    } 
} 

object Resolvers { 

    val scalaSbt = Resolver.url("Scala Sbt", url("http://repo.scala-sbt.org/scalasbt/sbt-plugin-snapshots"))(Resolver.ivyStylePatterns) 
    val sonatype = Resolver.sonatypeRepo("snapshots") 
} 

現在讀它看起來像我應該將我的項目build.sbt的Play 2.2 documentation

釷以下示例使用build.scala文件來聲明play.Project。這種方法是Play應用程序在2.2版之前定義的方式。該方法被保留以支持向後兼容性。我們建議您轉換爲基於build.sbt的方法,或者如果使用build.scala,則使用sbt的Project類型和項目宏。

是否有任何工作示例說明如何用build.sbt替換project/build.scala?我在這裏和那裏閱讀了一些簡短的文章......但我無法獲得一個有效的Play項目。

回答

9

沒有迫切需要您的構建轉化爲build.sbtbuild.sbt更簡單,但基本上只是編譯成Build.scala

這個問題的其他答案會起作用,但也許有點冗長。先從SBT文件:

http://www.scala-sbt.org/0.13.0/docs/Getting-Started/Multi-Project.html

現在,創建指定主項目和子項目,並把你的主要項目設置到主build.sbt文件:

lazy val auth = project.in(file("modules/auth")) 

lazy val main = project.in(file(".")).dependsOn(auth).aggregate(auth) 

playScalaSettings 

name := "myApp" 

version := "1.0-SNAPSHOT" 

libraryDependencies += "se.radley" %% "play-plugins-salat" % "1.3.0" 

scalacOptions += "-language:reflectiveCalls" 

routesImport += "se.radley.plugin.salat.Binders._" 

templatesImport += "org.bson.types.ObjectId" 

testOptions in Test := Nil 

lessEntryPoints <<= baseDirectory(customLessEntryPoints) 

resolvers ++= Seq(Resolvers.sonatype, Resolvers.scalaSbt) 

object Resolvers { 
    val scalaSbt = Resolver.url("Scala Sbt", url("http://repo.scala-sbt.org/scalasbt/sbt-plugin-snapshots"))(Resolver.ivyStylePatterns) 
    val sonatype = Resolver.sonatypeRepo("snapshots") 
} 

而現在,在modules/auth/build.sbt ,把你的設置的驗證模塊:

name := "myApp-auth" 

lessEntryPoints <<= baseDirectory(customLessEntryPoints) 

routesImport += "se.radley.plugin.salat.Binders._" 

templatesImport += "org.bson.types.ObjectId" 

testOptions in Test := Nil 

resolvers ++= Seq(Resolvers.sonatype, Resolvers.scalaSbt) 

無論如何,它可能需要一點調整,但希望你明白這一點。

1

如果使用build.scala,您使用SBT的項目類型和項目宏觀

更換play.ProjectProject和修復參數according to the ScalaDoc,它應該像

lazy val auth = Project(
    appName + "-auth", 
    file("modules/auth")).settings(
     version := appVersion, 
     libraryDependencies ++= authDependencies, 
     lessEntryPoints <<= baseDirectory(customLessEntryPoints), 
     routesImport += "se.radley.plugin.salat.Binders._", 
     templatesImport += "org.bson.types.ObjectId", 
     testOptions in Test := Nil, 
     resolvers ++= Seq(Resolvers.sonatype, Resolvers.scalaSbt) 
    ) 

lazy val main = Project(
    appName, 
    file("app")).settings(
     version := appVersion, 
     libraryDependencies ++= mainDependencies, 
     scalacOptions += "-language:reflectiveCalls", 
     routesImport += "se.radley.plugin.salat.Binders._", 
     templatesImport += "org.bson.types.ObjectId", 
     testOptions in Test := Nil, 
     lessEntryPoints <<= baseDirectory(customLessEntryPoints), 
     resolvers ++= Seq(Resolvers.sonatype, Resolvers.scalaSbt) 
    ).dependsOn(auth).aggregate(auth) 

同定義可以在build.sbt中使用。我還要提取常用設置:

val commonSettings = Seq(
    version := appVersion, 
    routesImport += "se.radley.plugin.salat.Binders._", 
    templatesImport += "org.bson.types.ObjectId", 
    testOptions in Test := Nil, 
    lessEntryPoints <<= baseDirectory(customLessEntryPoints), 
    resolvers ++= Seq(Resolvers.sonatype, Resolvers.scalaSbt) 
) 

lazy val auth = Project(
    appName + "-auth", 
    file("modules/auth")).settings(commonSettings: _*).settings(
     libraryDependencies ++= authDependencies 
    ) 

lazy val main = Project(
    appName, 
    file("app")).settings(commonSettings: _*).settings(
     libraryDependencies ++= mainDependencies, 
     scalacOptions += "-language:reflectiveCalls" 
    ).dependsOn(auth).aggregate(auth)