2013-11-22 10 views
9

Ho un multi-modulo di lavoro Gioca 2.2 applicazione che è organizzato come questo ...gioco: come convertire a build.sbt

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

... dove Build.scala contiene le seguenti dichiarazioni :

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") 
} 

Ora la lettura del Play 2.2 documentation sembra che dovrei convertire il mio progetto per build.sbt:

Th L'esempio seguente utilizza un file build.scala per dichiarare un play.Project. Questo approccio era il modo in cui le applicazioni di gioco sono state definite prima della versione 2.2. L'approccio viene mantenuto per supportare la retrocompatibilità. Ti consigliamo di convertire l'approccio basato su build.sbt o, se si utilizza build.scala, di utilizzare il tipo di progetto e la macro di progetto di sbt.

C'è qualche esempio di lavoro che descrive come sostituire project/build.scala con build.sbt? Ho letto alcuni brevi articoli qua e là ... ma non sono riuscito a ottenere un progetto Play funzionante.

risposta

9

Non v'è alcuna urgenza di convertire il vostro build build.sbt. build.sbt è più semplice, ma fondamentalmente viene compilato in Build.scala.

L'altra risposta a questa domanda funzionerà, ma è forse un po 'prolisso. Inizia con la documentazione SBT:

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

Ora, creare specificare i principali progetti di progetto e di sub, e mettere le impostazioni di progetto principali nel vostro principale build.sbt del file:

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") 
} 

Ed ora, in modules/auth/build.sbt , mettere le impostazioni per il modulo auth:

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) 

in ogni caso, potrebbe essere necessario un po 'di tweaking, ma spero che tu capisca il punto.

1

se si utilizza un build.scala, si utilizza il tipo di progetto e il progetto macro di SBT

Sostituire play.Project con Project e fissare gli argomenti according to the ScalaDoc, dovrebbe essere qualcosa di simile a

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) 

Same le definizioni possono essere utilizzate in build.sbt. Vorrei anche estrarre impostazioni comuni:

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)