http://www.scala-lang.org/downloads
http://www.scala-sbt.org/release/docs/Getting-Started/Setup.html
因为sbt会使用ivy作为库管理工具。ivy默认把library repository建在user home下面。Unix/Linux/Mac OS都还好说,如果就一个分区(或一个逻辑分区),无所谓发在哪个位置啦。如果操作系统是Windows,有分了C: D: E: 等若干分区,还是不要放在默认的%USERPROFILE%下面,C盘会随着开发的项目越来越多,大量的空间被开发库所占用。定制library local repository的位置的方法是:
编辑文件sbt启动脚本: [sbt安装目录]\sbt.bat,设置Java启动参数:-Dsbt.ivy.home=E:/dev/ivy/
java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -jar `dirname $0`/sbt-launch.jar "$@"
----
sbt shell
#!/usr/bin/env bash
declare -r NOSHARE="-Dsbt.global.base=project/sbtboot -Dsbt.boot.directory=project/boot -Dsbt.ivy.home=project/ivy"
java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M $NOSHARE -jar `dirname $0`/sbt-launch.jar "$@"
----------------
$ cat run.sh
#!/bin/bash
#
java -cp project/boot/scala-2.9.2/lib/scala-library.jar:target/scala-2.9.2/hello_2.9.2-1.0.jar $@
----------------
package jiux
object Upcase {
def main( args : Array[String] ) {
//scala.io.Source.stdin.getLines map { _.toUpperCase } foreach println
scala.io.Source.stdin.getLines.map{ _.toUpperCase }.foreach(println)
}
}
-----------------
class Exe(command:String, out:String=>Unit, err:String=>Unit, onExit:Int=>Unit) {
import scala.sys.process._
import scala.io._
import java.io._
import scala.concurrent._
import scala.concurrent.ops.spawn
val inputStream = new SyncVar[OutputStream];
val process = Process(command).run(
new ProcessIO(
stdin => inputStream.put(stdin),
stdout => Source.fromInputStream(stdout).getLines.foreach(out),
stderr => Source.fromInputStream(stderr).getLines.foreach(err)));
spawn { onExit(process.exitValue()) }
def write(s:String):Unit = synchronized {
inputStream.get.write((s + "\n").getBytes)
}
def close():Unit = {
inputStream.get.close
}
}
can use like this
import java.util.concurrent.CountDownLatch
val latch = new CountDownLatch(1)
val exe = new Exe("tr [a-z] [A-Z]",
out => println("o: " + out),
err => println("e: " + err),
code=> {println(code) ; latch.countDown() })
exe.write("lower")
exe.close()
----------------------------------------------------
> ./sbt update
> ./sbt package
> ./sbt assembly-package-dependency