[Scala] - day 12 : Configuring Your First Scala Project With SBT

Từ đầu đến giờ cách chúng ta làm việc với scala là bằng REPL hoặc execute những file scala chứ không phải là 1 application.
Với kiến thức đã tìm hiểu về objects, ta có thể coi nó như 1 entry points cho application, với điều đó giờ chúng ta có 1 cơ chế mới để execute source code. Chúng ta có thể compile class trong những file và package khác nhau và truy cập chúng từ application.
Giờ bạn cần cài đặt SBT và tạo 1 project rỗng.Ví dụ giờ tôi tạo 1 project mới ứng với tên folder : FirstScalaApplication.Trước tiên đơn giản ta tạo 1 object với main function.
HoaiPT$ mkdir FirstScalaApplication
HoaiPT$ cd FirstScalaApplication/
FirstScalaApplication HoaiPT$ mkdir -p src/main/scala
FirstScalaApplication HoaiPT$ cat > src/main/scala/Hello.scala
object Hello {
  def main(args: Array[String]) {
    println("Hello from SBT")
  }
}
^C
FirstScalaApplication HoaiPT$ sbt run
[info] Set current project to firstscalaapplication (in build file:/Users/HoaiPT/Workspace/sbt/FirstScalaApplication/)
[info] Updating {file:/Users/HoaiPT/Workspace/sbt/FirstScalaApplication/}firstscalaapplication...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Compiling 1 Scala source to /Users/HoaiPT/Workspace/sbt/FirstScalaApplication/target/scala-2.10/classes...
[info] Running Hello
Hello from SBT
[success] Total time: 3 s, completed Jun 11, 2016 6:35:29 PMBạn có thấy chúng ta có thể compile và run một application mà không cần vào Scala space hay chạy compile file?. Sbt sẽ tự động tìm kiếm mainstream Scala code theo thư mục mặc định src/main/scala và phần test code sẽ nằm ở thư mục sau src/test/scala.
Bây giờ ta thử  thêm 1 build script. Với "chương trình" hiện tại ta không cần đến nó nhưng chúng ta sẽ cần nó khi cần thêm những thư viện ngoài vào. Ví dụ sau chỉ như 1 overview cho các bạn về sbt build script.
SBT hỗ trợ viết một build script bằng Scala, tất cả được đặt trong build.sbt ở thư mục root. Và nó cũng hỗ trợ viết một build script bằng Scala đặt trong thư mục “project” nó chứa một object extends sbt.Build. Cả 2 kiểu SBT build scripts đề sử dụng phép gán (:=) và dependency grouping (%). Ta sẽ rõ hơn ở ví dụ cụ thể.
Khi bạn tạo 1 Scala project bằng activator hay IntelliJ thì file build.sbt sẽ mặc định được tạo nên ở đây tôi sẽ làm theo cách còn lại.
FirstScalaApplication HoaiPT$ mkdir project
FirstScalaApplication HoaiPT$ cat > project/FirstScalaApplicationBuild.scala
import sbt._
import sbt.Keys._
object FirstScalaApplicationBuild extends Build
{
  val firstScalaApplicationDependencies = List(
    "org.scalatest" % "scalatest_2.11" % "2.2.1" % "test"
  )
  val firstScalaApplicationSettings = List(
    name := "FirstScalaApplication",
    version := "1.0",
    scalaVersion := "2.11.2",
    libraryDependencies := firstScalaApplicationDependencies
  )
  override lazy val settings = super.settings ++ firstScalaApplicationSettings
}
^C
FirstScalaApplication HoaiPT$ sbt compile
[info] Loading project definition from /Users/HoaiPT/Workspace/sbt/FirstScalaApplication/project
[info] Updating {file:/Users/HoaiPT/Workspace/sbt/FirstScalaApplication/project/}firstscalaapplication-build...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Compiling 1 Scala source to /Users/HoaiPT/Workspace/sbt/FirstScalaApplication/project/target/scala-2.10/sbt-0.13/classes...
[info] Set current project to firstscalaapplication (in build file:/Users/HoaiPT/Workspace/sbt/FirstScalaApplication/)
[info] Updating {file:/Users/HoaiPT/Workspace/sbt/FirstScalaApplication/}firstscalaapplication...
[info] Resolving jline#jline;2.12 ...
[info] Done updating.
[info] Compiling 1 Scala source to /Users/HoaiPT/Workspace/sbt/FirstScalaApplication/target/scala-2.11/classes...
[success] Total time: 2 s, completed Jun 11, 2016 7:30:08 PM
Giờ hãy thử tạo project Scala cơ bản của riêng bạn với activator new hay với IntelliJ và xem nội dung file build.sbt ở thư mục root rồi so sánh với cách viết trên nhé.
Giờ tôi sẽ import project này vào IntelliJ :
import Scala project to IntellIJ step 1

import Scala project to IntellIJ step 2

import Scala project to IntellIJ - finished
Bạn sẽ cần biết về SBT khi làm ác dự án với Scala để tổ chức source code của mình, tôi khuyên bạn nên dành thời gian đọc thêm về nó : SBT 0.13 .
Giờ chúng ta đã có thể run Scala project với IDE, hãy thử vài vài thay đổi ở Build hay thêm vài class và chạy thử chúng.

Comments