Вот что у меня есть в определении проекта SBT (версия 0.10):
val Mklauncher = config("mklauncher") extend(Compile)
val mklauncher = TaskKey[Unit]("mklauncher")
val mklauncherTask = mklauncher <<= (target, fullClasspath in Runtime) map { (target, cp) =>
def writeFile(file: File, str: String) {
val writer = new PrintWriter(file)
writer.println(str)
writer.close()
}
val cpString = cp.map(_.data).mkString(":")
val launchString = """
CLASSPATH="%s"
scala -usejavacp -Djava.class.path="${CLASSPATH}" "$@"
""".format(cpString)
val targetFile = (target / "scala-sbt").asFile
writeFile(targetFile, launchString)
targetFile.setExecutable(true)
}
... // remember to add mklauncherTask to Project Settings
Задача mklauncher
создает сценарий target/scala-sbt
, который выполняет scala
с уже заданным путем к классам проекта.Было бы неплохо, чтобы mklauncher
выполнялся автоматически всякий раз, когда изменяется путь к классу, но я пока не стал этого делать.
(я использую Java-путь к классам, а не Scala, для простоты создания встроенных интерпретаторов.)