2013-11-22 12 views
9

Tôi đã một đa mô-đun làm việc Chơi 2.2 ứng dụng được tổ chức như thế này ...Chơi tiểu dự án: làm thế nào để chuyển đổi sang build.sbt

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

... nơi Build.scala chứa những điều khoản sau đây :

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

Bây giờ đọc Play 2.2 documentation nó trông giống như tôi nên chuyển đổi dự án của tôi để build.sbt:

Th Ví dụ sau đây sử dụng tệp build.scala để khai báo play.Project. Cách tiếp cận này là cách các ứng dụng Play được xác định trước phiên bản 2.2. Cách tiếp cận này được giữ lại để hỗ trợ khả năng tương thích ngược. Chúng tôi khuyên bạn nên chuyển sang phương pháp dựa trên build.sbt hoặc, nếu sử dụng build.scala, bạn sử dụng loại dự án của sbt và macro dự án.

Có ví dụ làm việc nào mô tả cách thay thế project/build.scala bằng build.sbt không? Tôi đọc một số bài viết ngắn ở đây và ở đó ... nhưng tôi không thể có được một dự án Play đang hoạt động.

Trả lời

9

Không có nhu cầu cấp thiết để chuyển đổi xây dựng của bạn để build.sbt. build.sbt đơn giản hơn, nhưng về cơ bản chỉ được biên dịch thành Build.scala.

Câu trả lời khác cho câu hỏi này sẽ hoạt động, nhưng có lẽ là một chút tiết. Bắt đầu với các tài liệu SBT:

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

Bây giờ, tạo ra định dự án dự án và phụ chính của bạn, và đặt thiết lập dự án chính của bạn vào chính build.sbt tập tin của bạn:

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

Và bây giờ, trong modules/auth/build.sbt , đặt cài đặt của bạn cho mô-đun 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) 

Dù sao, nó có thể cần một chút tinh chỉnh, nhưng hy vọng bạn có được điểm.

1

nếu sử dụng một build.scala, bạn sử dụng loại dự án SBT và dự án vĩ mô

Thay play.Project với Project và sửa chữa các đối số according to the ScalaDoc, nó phải là một cái gì đó giống như

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 các định nghĩa có thể được sử dụng trong build.sbt thay thế. Tôi cũng xin trích xuất các thiết lập chung:

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) 
Các vấn đề liên quan