SCALA-003 Sử dụng SBT (Scala Build Tool)

Nội dung bài viết

Nếu như bạn đã sử dụng qua Ant hoặc Maven (build tool của Java) thì có lẽ SBT không xa lạ vì nó là build tool tương tự cho Scala.

Cấu trúc của một project sbt đơn giản như sau:

│   build.sbt
├───lib
├───project
├───src
│   ├───main
│   │   ├───java
│   │   ├───resources
│   │   └───scala
│   └───test
│       ├───java
│       ├───resources
│       └───scala
└───target

Tập tin build.sbt là tập tin cấu hình project đơn giản như sau:

name := "ThetaLog"
version := "1.0"
scalaVersion := "2.12.7"

SBT không hỗ trợ sẳn lệnh để tạo cấu trúc thư mục này, tuy nhiên bạn hoàn toàn có thể tự soạn shell script hoặc dùng IntelliJ (hoặc các IDE khác) để tạo cấu trúc thư mục như trên.

1. Compiling, Running, và Packaging Scala Project

Bạn muốn SBT biên dịch và chạy Scala Project của mình, và gói nó thành *.jar file.

Giả sử thư mục trên có thêm tập tin HelloWorld.scalasrc/main/scala

package com.thetalog

object Main extends App{
    println("Hello ThetaLog!")
}

Để chạy chúng ta có thể chạy sbt compile, sbt run, sbt package từ terminal:

sbt compile
sbt run
sbt package

Lần đầu chạy thì SBT sẽ khởi động hơi lâu, các lần sau sẽ nhanh hơn:

Sau khi packaging thì tập tin *.jar nằm trong thư mục target phiên bản Scala tương ứng. Chạy thử bằng scala:

scala .\thetalog_2.12-1.0.jar

2. Interactive với SBT

Thay vì như trên bạn có thể hoàn toàn gọi SBT từ root folder và interactive trực tiếp, bởi vì SBT khởi động không được nhanh cho lắm

sbt

Với mỗi nhắc lệnh sbt:ThetaLog bạn có thể gọi lệnh tương ứng:

Để kết thúc, bạn có thể dùng tổ hợp phím Ctrl + C, chương trình sẽ hỏi sbt:ThetaLog> Terminate batch job (Y/N)? chỉ cần yEnter.

3. Xóa những tập tin biên dịch

Bạn có thể xóa thư mục biên dịch ở target bằng lệnh:

sbt clean

4. Thêm thư viện

Thư viện thêm vào project Scala phân ra làm 2 loại:

  • unmanaged dependencies: Những thư viện nằm trong thư mục lib của dự án
  • managed dependencies: những thư viện được quản lí có thể tải về từ qua mạng

Phần này bạn đọc quan tâm đọc thêm ở: https://www.scala-sbt.org/release/docs/Library-Dependencies.html