sbt 有替代的進入點可用於
這個進入點應被視為實驗性的。這些方法的一個顯著缺點是啟動時間。
腳本執行器可以執行標準的 Scala 腳本,但具有配置 sbt 的額外能力。sbt 設定可以嵌入在以 /***
開頭的註解區塊中。
複製下列腳本並使其可執行。您可能需要根據腳本名稱和作業系統調整第一行。執行時,範例應會擷取 Scala、所需的相依性、編譯腳本並直接執行。例如,如果您將其命名為 script.scala
,則在 Unix 上應執行
chmod u+x script.scala
./script.scala
#!/usr/bin/env sbt -Dsbt.version=1.6.1 -Dsbt.main.class=sbt.ScriptMain -error
/***
ThisBuild / scalaVersion := "2.13.12"
libraryDependencies += "org.scala-sbt" %% "io" % "1.6.0"
*/
println("hello")
這會印出 hello。如果您習慣從 sbt 使用 IO,我們可以利用它進行基本檔案操作,例如讀取文字檔案。
#!/usr/bin/env sbt -Dsbt.version=1.6.1 -Dsbt.main.class=sbt.ScriptMain -error
/***
ThisBuild / scalaVersion := "2.13.12"
libraryDependencies += "org.scala-sbt" %% "io" % "1.6.0"
*/
import sbt.io.IO
import sbt.io.Path._
import sbt.io.syntax._
import java.io.File
import java.net.URI
import sys.process._
def file(s: String): File = new File(s)
def uri(s: String): URI = new URI(s)
def processFile(f: File): Unit = {
val lines = IO.readLines(f)
lines foreach { line =>
println(line.toUpperCase)
}
}
args.toList match {
case Nil => sys.error("usage: ./script.scala <file>...")
case xs => xs foreach { x => processFile(file(x)) }
}
此腳本會將檔案名稱作為引數,並以全部大寫印出。
$ ./script.scala script.scala
#!/USR/BIN/ENV SBT -DSBT.MAIN.CLASS=SBT.SCRIPTMAIN -ERROR
....