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
....