2013-11-22 18 views
9

Mam pracę multi-moduł Zagraj 2.2 wniosku, który jest zorganizowany tak ...zabaw podprojekty: Jak konwertować do build.sbt

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

... gdzie Build.scala zawiera następujące oświadczenia :

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

teraz czytając Play 2.2 documentation wygląda powinny przekonwertować mój projekt build.sbt:

Th W poniższym przykładzie użyto pliku build.scala do zadeklarowania obiektu play.Project. Takie podejście było sposobem, w jaki aplikacje Play zostały zdefiniowane przed wersją 2.2. Podejście to zostało zachowane w celu zapewnienia kompatybilności wstecznej. Zaleca się przekonwertowanie do metody opartej na build.sbt lub, jeśli używana jest biblioteka build.scala, należy użyć typu projektu sbt i makra projektu.

Czy jest jakiś działający przykład, który opisuje, jak zastąpić project/build.scala z build.sbt? Czytałem krótkie artykuły tu i tam ... ale nie udało mi się uzyskać działającego projektu Play.

Odpowiedz

9

Nie ma pilnej potrzeby konwertowania build do build.sbt. build.sbt jest prostszy, ale w zasadzie po prostu zostaje skompilowany do Build.scala.

Inna odpowiedź na to pytanie będzie działała, ale jest może trochę gadatliwa. Zacznij z dokumentacją SBT:

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

Teraz tworzyć określić swoje główne projekty projektowych i sub, i umieścić swoje główne ustawienia projektu do głównego build.sbt pliku:

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

A teraz, w modules/auth/build.sbt , wprowadź ustawienia modułu 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) 

W każdym razie może wymagać trochę poprawek, ale mam nadzieję, że masz rację.

1

przypadku korzystania z build.scala, należy użyć SBT za typ projektu i projektu makro

Wymień play.Project z Project i naprawić argumenty according to the ScalaDoc, powinno być coś jak

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) 

samo definicje mogą być użyte zamiast tego w build.sbt. Chciałbym również wyodrębnić wspólne ustawienia:

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) 
Powiązane problemy