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.scala
ở src/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 y
và Enter
.
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